移除鏈表中重復的元素


先上題目 

給出鏈表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回刪除3之后的鏈表:1->2->4->5。 
嘗試這做了一些,下面上代碼
  public static ListNode Remove(ListNode head, int val)
        {
            ListNode A = head;
            ListNode b = null;
            //排除表頭值相等

         
            //先不去管當前的表頭的 val是否相等;
            while (A.next != null)
            {
             
                if (A.next.val == val)
                {  //b就是相等的結點
                    b = A.next;
                    //判斷b的next是否為空
                   if (b.next == null)
                    {   //這里為什么不寫b.next=Null;
                        //進行到這里就要跳出循環了
                        // 現在我們的b沒有進行任何賦值操。
                        //b再這里不屬於鏈表的
                        //A.屬於鏈表
                        A.next = null;
                            break;
                    }
                    //把b的下一個結點給a的下一個結點。
                    //A.next 結點存儲的當前val相等的結點的位置
                    // A.next = b.next; 就是把當前 b.next的地址給A.next,
                    //原本存在A.next里面的結點,指向的位置發生了改變,到了b.next的位置
                    A.next = b.next;
                   
                }
                else
                {    //就是循環鏈表
                    A = A.next;
                }
              
            }
            //最后再考慮當前的表頭的val是否相等
            //如果相當,就把表頭的next結點的地址給head,
            if (head.val == val)
            {
                head = head.next;
            }
            return head;
        }
  ListNode a = new ListNode(3);
           
            ListNode b = new ListNode(2);
            ListNode c = new ListNode(3);
            ListNode d = new ListNode(3);
            ListNode e = new ListNode(3);
            ListNode f = new ListNode(5);
            ListNode g = new ListNode(3);
            a.next = b;
            b.next = c;
            c.next = d;
            d.next = e;
            e.next = f;
            f.next = g;
           ListNode head=  Remove(a, 3);
            ListNode s = head;
            //Console.WriteLine(s.next.val);
           ListNode B = new ListNode(0);
            B = head;
            while (B != null)
            {
                Console.WriteLine(B.val);
                B = B.next; ;
            }
            //Console.WriteLine(s.val);
            Console.ReadKey();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM