您的位置:首页 > 其它

Remove Duplicates from Sorted List II

2015-08-10 09:19 381 查看
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.

For example,

Given 1->2->3->3->4->4->5, return 1->2->5.

Given 1->1->1->2->3, return 2->3.

思路:这题算法不难,就是要注意头重复和尾重复的情况

class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {

if(head==NULL)//头为空
return NULL;
int count=0;
ListNode *p = head;
ListNode *q = p->next;
while(q){
//开头重复
if(p->val==q->val){
while(q->next && q->val==q->next->val)
q = q->next;
if(q->next == NULL)//所有的都重复
return NULL;
else{
p=q->next;
head=p;
q=p->next;
}
}
//头不重复
else{
while(q->next && q->val==q->next->val){
q = q->next;
count ++;
}
if(q->next == NULL){//结束了
if(!count)//尾不重复
return head;
else{//尾重复

//释放
ListNode *t = p->next;
while(t==q){
ListNode *tmp = t;
t = t->next;
delete tmp;
}

p->next=NULL;
return head;
}
}
else{
if(count){//存在重复

//释放
ListNode *t = p->next;
p->next=q->next;
while(t==q){
ListNode *tmp = t;
t = t->next;
delete tmp;
}

q = p->next;
count = 0;
}
else{//不存在重复
if(p==head){
p = q;
q = p->next;
head->next=p;
}
else{
p = q;
q = p->next;
}
}
}
}
}
return head;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: