先添加一个头结点,确保头结点不会重复
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类
* @return ListNode类
*/
ListNode* deleteDuplicates(ListNode* head) {
// write code here
ListNode* newhead=new ListNode(1001); //添加头结点
newhead->next=head;
ListNode *pre=newhead,*p=head;
bool flag=false;
while(p){
while(p->next&&p->val==p->next->val){ //如果该节点和后面节点重复
flag=true;
pre->next=p->next;
p=p->next;
}
if(flag){ //重复的那个节点剩下最后一个,也被删除
pre->next=p->next;
//pre=pre->next; //只要有删除,pre节点就不要动
p=p->next;
flag=false;
}else{
pre=pre->next;
p=p->next;
}
}
return newhead->next;
}
};