现在的位置: 首页 > 综合 > 正文

LeetCode–Remove Duplicates from Sorted List II

2018年10月01日 ⁄ 综合 ⁄ 共 871字 ⁄ 字号 评论关闭

描述
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) {
        ListNode *dummy = new ListNode(-1);
        dummy->next = head;
        if(head == NULL)
            return head;

        ListNode *prev = dummy;
        ListNode *cur = head;
        ListNode *next = NULL;
        int dup = 0;
        for(; cur!=NULL; )
        {   
            next = cur->next;
            if(next){
                if(cur->val == next->val){
                    cur->next = next->next;
                    delete next;
                    dup = 1;
                    //next = cur->next;
                }else{
                    if(dup == 1)
                    {
                        dup = 0;
                        prev->next = cur->next;
                        delete cur;
                        cur = prev->next;
                    }else{
                        prev = cur;
                        cur = prev->next;
                    }
                }
            }else
            {
                if(dup == 1)
                {
                    dup = 0;
                    prev->next = cur->next;
                    delete cur;
                    cur = prev->next;
                }else{
                    cur = cur->next;
                    prev = cur;
                }
            }
        }
        
        return dummy->next;
    }
};

墨迹半天解决了。确实不好想,有些边界需要注意。

抱歉!评论已关闭.