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; } };