移除链表中重复的元素

先上题目 

给出链表 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();

posted @ 2017-03-01 21:32  夜莫白  阅读(1731)  评论(0编辑  收藏  举报