leetcode[82]:Remove Duplicates from Sorted List II

来源:互联网 发布:java synchronized 块 编辑:程序博客网 时间:2024/06/13 00:17

Remove Duplicates from Sorted List II

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.

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     struct ListNode *next; * }; */struct ListNode* deleteDuplicates(struct ListNode* head) {    struct ListNode *L, *tmp,*pre;    int k;    if(head == NULL ) return NULL;    if(!head->next) return head;    while(head->val == head->next->val)    {        k=head->val;        while(head->next && head->next->val == k)        {            head=head->next;        }        if(!head->next) return NULL;        head=head->next;        if(!head->next) return head;    }    if(!head->next) return head;    pre =  head;    L = pre->next;    while(L->next)    {        while( L->val == L->next->val)        {            k=L->val;            while(L->next && L->next->val == k)            {                L=L->next;            }            if(!L->next) {pre->next=NULL;return head;}            L=L->next;         if(!L->next) {pre->next=L;return head;}        }        pre->next=L;        pre=L;        L=pre->next;    }    return head;}

保留前指针,主要头结点重复的删除。

0 0