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.

class Solution {
public:
    ListNode *deleteDuplicates(ListNode *head) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        ListNode dy_node(0), *q = &dy_node;
        ListNode de_node(0), *q1 = &de_node;
        int last = INT_MAX, counter = 0;
        ListNode * pre = head;
        for(ListNode *p = head; p; p = p->next){
            if (last != p->val){
                if (counter == 1){
                    q = q->next = pre;
                }
                counter = 1;
                pre = p;
                last = p->val;
            }else{
                counter++;
            }    
        }
        if (counter == 1){
            q = q->next = pre;
            counter = 0;
        }
        q->next = NULL;
        q1->next = NULL;
        /*
        ListNode *p = de_node.next;
        while(p){
            ListNode *temp = p->next;
            delete p;
            p = temp;
        }*/
        return dy_node.next;
    }
};

 

posted @ 2013-07-09 20:24  一只会思考的猪  阅读(154)  评论(0编辑  收藏  举报