原题链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/
1、map
ListNode* deleteDuplicates(ListNode* head) {
map<int,int> map;
ListNode *p=head;
while(p!=NULL){
map[p->val]++;//将所有元素存放在map中并计算次数
p=p->next;
}
ListNode *pre=new ListNode;
pre->next=head;
p=pre;
for(auto iter=map.begin();iter!=map.end();iter++){
if(iter->second==1){//只记录次数等于1的元素
p=p->next;
p->val=iter->first;
}
}
p->next=NULL;
return pre->next;
}
2、快慢指针
ListNode* deleteDuplicates(ListNode* head) {//通过快慢指针跳过重复元素
ListNode *pre=new ListNode;
pre->next=head;
ListNode *p=pre;
while(p->next!=NULL&&p->next->next!=NULL){
ListNode *tmp=p->next;
if(tmp->val==tmp->next->val){//判断下面两个节点是否重复
while(tmp->next!=NULL&&tmp->val==tmp->next->val){//若重复则一直遍历到不重复的那个节点
tmp=tmp->next;
}
p->next=tmp->next;//将中间重复的部分删除
}
else p=p->next;//若没有重复的部分则后移p再次进行判断
}
return pre->next;
}