[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
};

 

posted @ 2014-08-13 22:57  Xylophone  Views(124)  Comments(0Edit  收藏  举报