这道题目看起来很简单,但是实际操作起来并不容易,尤其需要考虑头结点重复修改头结点
这里说一下思路:直接声明一个ListNode **p = pHead
用于修改结点
p最初指向头结点,当头结点重复时可以通过*p
直接修改头结点 不重复时可以通过p = &(xxx)
修改其指向的结点
class Solution { public: ListNode* deleteDuplication(ListNode* pHead) { ListNode *tmp; bool flag = false; ListNode **p = &pHead; if(!pHead) return NULL; while(*p){ int val = (*p)->val; flag = false; tmp = (*p)->next; while(tmp && tmp->val == val){ flag = true; tmp = tmp->next; } //发生了重复 修改当前指向的结点为后面第一个不是val的结点 if(flag){ *p = tmp; } //没发生重复 修改p指向原本结点的next结点 else{ p = &((*p)->next); } } return pHead; } };