删除链表中重复元素,和 I 的区别是如果有重复全部删除,一个不留。
就多了点细节的东西,没什么难度。
/**
* 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 == NULL || head->next ==NULL)
return head;
bool flag = false;
ListNode *myHead = new ListNode(-1);
myHead->next = head;
ListNode *pre = myHead, *cur = head, *post = cur->next;
while(post){
if(cur->val == post->val){
flag = true;
ListNode *tmp = post->next;
cur->next = tmp;
delete post;
post = tmp;
}
else{
if(flag){
pre->next = post;
delete cur;
cur = post;
post = post->next;
flag = false;
}
else{
pre = cur; cur = post; post = post->next;
}
}
}
if (flag){
pre->next = post;
delete cur;
}
ListNode *res = myHead->next;
delete myHead;
return res;
}
};