您的位置:首页 > 其它

lintcode-删除排序链表中的重复数字II-113

2015-09-17 08:54 363 查看
给定一个排序链表,删除所有重复的元素只留下原链表中没有重复的元素。

样例

给出1->2->3->3->4->4->5->null,返回1->2->5->null

给出1->1->1->2->3->null,返回 2->3->null

<span style="font-size:14px;">/**
* Definition of ListNode
* class ListNode {
* public:
*     int val;
*     ListNode *next;
*     ListNode(int val) {
*         this->val = val;
*         this->next = NULL;
*     }
* }
*/
class Solution{
public:

map<int,int> check; //检验节点是否满足删除条件

ListNode * deleteDuplicates(ListNode *head) {
if(!head)
return NULL;

ListNode *p=head;
ListNode *q=NULL;   //q负责指向p的前一个节点
ListNode *ret=head;
while(p){
++check[p->val]; //计数
p=p->next;
}
p=head;
while(p){
if(check[p->val]>1){  //节点数大于一应该删除
ListNode *tmp;
tmp=p;            //负责指向将要被删除的节点
p=p->next;
if(NULL==q){     //该节点是链表的头结点
ret=p;
}else{           //非头结点
q->next=p;
}
free(tmp);
}else{
q=p;
p=p->next;
}
}
return ret;
}
};</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: