https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/
思路:注意看清题意,是删除所有含有重复数字的节点。那么当 c u r − > v a l cur->val cur−>val与 n x t − > v a l nxt->val nxt−>val相等时,这两个节点都要删除,这意味着我们需要记录 c u r cur cur的前驱 p r e pre pre。那么用这三个指针模拟一下就行了,注意细节即可。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(!head||!head->next)
return head;
ListNode myhead(0);
myhead.next=head;
ListNode *pre=&myhead;
ListNode *cur=head,*nxt=cur->next;
while(nxt){
if(cur->val==nxt->val){
ListNode *tmp;
while(nxt&&nxt->val==cur->val){
tmp=nxt->next;
delete(nxt);
nxt=tmp;
}
delete(cur);
cur=nxt;
pre->next=cur;
nxt=cur?cur->next:nullptr;
}
else
pre=cur,cur=nxt,nxt=nxt->next;
}
return myhead.next;
}
};