给定一个排序链表,删除所有重复的元素只留下原链表中没有重复的元素。
样例
给出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>