首页 > 代码库 > [LeetCode] Remove Duplicates from Sorted List II

[LeetCode] 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; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution {public:    ListNode *deleteDuplicates(ListNode *head) {        if(head == NULL)            return NULL;        ListNode *p = head, *h = head,*pre;        while( h != NULL && h->next != NULL && h->val == h->next->val){            while(p!= NULL && p->next != NULL && p->val == p->next->val){                p = p->next;            }//end while            p = p->next;            h = p;        }//end while        if(h==NULL)            return h;        else{           pre = h;               p = h->next;        }        bool flag = 0;        while(p!= NULL && p->next != NULL ){            if(p->val != p->next->val && flag == 0){                pre = p;                p = p->next;                flag = 0;            }else if(p->val != p->next->val && flag == 1){                p = p->next;                pre->next = p;                flag = 0;            }else{                p = p->next;                flag = 1;            }         }        if(p!=NULL && flag == 1){           pre->next = NULL;        }                  return h;    }//end func};