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<Integer,Integer> 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;
}
}