题解 | #删除有序链表中重复的元素-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) {
ListNode* newhead = new ListNode(0);//设置一个初始链表
newhead->next = head;//将head链表添加到newhead中
ListNode* pre = newhead;
ListNode* curr = head;
int count=0;
while(curr!=nullptr&&curr->next!=nullptr){
if(curr->val == curr->next->val){//第一部分,开始删除中间重复元素aaaabbbc变成了abbbc
curr->next = curr->next->next;//curr指针就是判断相邻元素是否重复的
count++;//count是用来记录curr的相邻元素是否重复,重复的话,pre本身可不能更新哦,防止aaabb出现
}
else{
if(count>0){//如果经历了重复元素,那么不管这些,直接跳下去,指向bbbc,之后发现还是重复,指向为c
pre->next = curr->next;
count = 0;
}
else{//只有在count为0而且相邻元素不重复的情况下,pre才走到curr的位置上
pre=curr;
}
curr = curr->next;//判断完毕,前进一位
}
}
if(count>0){//带上最后的nullptr
pre->next = curr->next;
}
return newhead->next;
}
};