这道题目看起来很简单,但是实际操作起来并不容易,尤其需要考虑头结点重复修改头结点
这里说一下思路:直接声明一个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;
}
};
京公网安备 11010502036488号