题解 | #删除有序链表中重复的元素-II#
删除有序链表中重复的元素-II
http://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024
先添加一个头结点,确保头结点不会重复
/**
* 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;
}
};