82. Remove Duplicates from Sorted List II

1.两个指针的方法

差点自己就想出来了,重点在于if(pre.next==cur)的处理

        if(head==null) return null;
        ListNode FakeHead=new ListNode(0);
        FakeHead.next=head;
        ListNode pre=FakeHead;
        ListNode cur=head;
        while(cur!=null){
            while(cur.next!=null&&cur.val==cur.next.val){
                cur=cur.next;
            }
            if(pre.next==cur){
                pre=pre.next;
            }
            else{
                pre.next=cur.next;
            }
            cur=cur.next;
        }
        return FakeHead.next;
    }

2.自己的笨办法

把重复的元素先找出来,比较麻烦

class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if(head==null||head.next==null)
            return head;
        HashMap map=new HashMap();
        ListNode p1=head;
        while(p1.next!=null){
            if(p1.val==p1.next.val){
                map.put(p1.val,1);
                p1=p1.next;
            }
            else
                p1=p1.next;
            if(p1==null)
                break;
        }
        ListNode out=new ListNode(999);
        ListNode p3=out;
        while(head!=null){
            if(!map.containsKey(head.val)){
                ListNode tmp=new ListNode(head.val);
                out.next=tmp;
                out=out.next;
            }
            head=head.next;
        }
        return p3.next;
   
    }
}

你可能感兴趣的:(82. Remove Duplicates from Sorted List II)