class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
// 声明一个头结点 统一操作
ListNode* pHead = new ListNode(-1);
pHead->next = head;
ListNode* pre = pHead; // 前驱指针 用于删除结点
ListNode* p = pre->next; // 当前工作指针
while(p && p->next){
if(p->val == p->next->val){ // 当前指针和下一个指针值相等 即重复
ListNode* tmp = p->next;
while(tmp && tmp->val == p->val){
tmp = tmp->next; // 找到与当前指针值不同的节点,用于将中间重复节点删除
}
pre->next = tmp; // 删除
p = pre->next; // 工作指针重新赋值
}else{ // 不是重复节点 直接后移 不做删除操作
p = p->next;
pre = pre->next;
}
}
return pHead->next;
}
};