class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode* res = new ListNode(0); //省去判断链表头重复的情况
res->next = head;
ListNode *pre = res, *cur = head; //记录前一个没重复的节点和当前节点
while(cur && cur->next) { //后面元素少于2个则不会重复
bool repeat = 0; //是否重复标志位
while(cur->next && cur->next->val == pre->next->val) { //存在下一节点并且下一节点的值与pre后面的值(即接下来要判断是否重复的节点值)相同时
repeat = 1; //设置标志位
cur = cur->next; //当前节点前移直到重复节点的末尾
}
if(repeat) pre->next = cur->next; //当有重复时前一个没重复的节点指向末尾重复节点的下一位(可能为空指针)
else pre = cur; //否则没重复节点前移
cur = cur->next; //当前节点前移
}
return res->next;
}
};