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

来源:互联网 发布:ubuntu 17最快的源 编辑:程序博客网 时间:2024/06/05 05:48

给定一个排序链表,删除所有重复的元素只留下原链表中没有重复的元素。


样例

给出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>


0 0
原创粉丝点击