两种解法,第一种比yxc的更好理解
第二种是暴力枚举
ListNode* deleteDuplication(ListNode* head) {
auto dummy=new ListNode(-1);
dummy->next=head;
auto p1=dummy;
auto p2=p1->next;
while(p2){
while(p2->next&&p1->next->val==p2->next->val)p2=p2->next;
if(p1->next==p2){p1=p1->next;p2=p2->next;
}
else {
p1->next=p2->next;
p2=p2->next;
}
}
return dummy->next;
}
```
ListNode deleteDuplication(ListNode head) {
if(head==0)return head;
ListNode*p1=head;
ListNode*p2;
if(head->next!=0)p2=head->next;
while(p1->val==p2->val)//特判aabb类情况
{
while(p2->next!=0&&p1->val==p2->next->val)p2=p2->next;
if(p2->next==0) return 0;
else {
p1=p2;
p2=p2->next;
p1->next=0;
p1=p2;
if(p2->next!=0)p2=p2->next;
else return p1;//防止3334出现死循环
}
}
head=p1;//防止头结点被删除
while(p2!=0){
while(p2->next!=0&&p1->next->val!=p2->next->val){
p1=p2;
p2=p2->next;
}
if(p2->next==0)return head;
while(p2->next!=0&&p1->next->val==p2->next->val)
p2=p2->next;
if(p2->next==0)p1->next=0 ;
else {
p1->next=p2->next;
p2=p2->next;
}
}
return head;
}
```