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.

解题思路:防止情况的多样性,先在head前面加上一个节点node,这样无论什么情形都可以统一为一种处理方式。

  设置一个work指针指向node,如果work->next->val == work->next->next->val,表明有相同元素出现,则在内循环内将相同元素删除到只剩2个,在循环结束时,再讲这2个相同的也删除,如果work->next->val != work->next->next->val;则跳过

/**
 * 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 *node = new ListNode(0);
        node->next = head;
        
        ListNode *work = node;
        int key = node->next->val;
        
        while(work->next && work->next->next)
        {
            if(work->next->val == work->next->next->val)
            {
                ListNode *p = work->next;
                while(p->next->next && p->next->val==p->next->next->val)
                {
                    p->next = p->next->next;
                }
                work->next = work->next->next->next;
            }
            else
            {
                work = work->next;
            }
        }
        return node->next;
    }
};

 

posted @ 2014-12-13 15:16  ElephantKing  阅读(116)  评论(0编辑  收藏  举报