首页 > 代码库 > [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 onlydistinct 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.


基本思路:

设定一个标志是否是重复数字的变量isrepeat,当前和后一个一样就将isrepeat置true。 然后将isrepeat的节点删除,留下不重复节点。


代码:

ListNode *deleteDuplicates(ListNode *head) {  //C++
        if(head == NULL || head->next == NULL) 
            return head;
            
        ListNode tmphead(0);
        tmphead.next= head;
        
        ListNode* pre = &tmphead;
        ListNode* tmp = head;
        
        bool isRepeat = false;
        while(tmp->next != NULL)
        {
            if(tmp->val == tmp->next->val)
            {
                isRepeat = true;
            }
            else 
            {
                if(isRepeat)
                {
                    isRepeat = false;
                }
                else 
                {
                    pre->next = tmp;
                    pre = tmp;
                }
            }
            tmp = tmp->next;
        }
        if(!isRepeat)
        {
            pre->next = tmp;
            pre = tmp;
        }
        pre->next = NULL;
        return tmphead.next;
    }


[leetcode]Remove Duplicates from Sorted List II