[leetcode]Remove Duplicates from Sorted List II

关键:1.维持三个指针pPrePre, pPre, pCurrent(两个其实也可以);2.使用头结点dummy简化过程;

class Solution {
public:
    ListNode *deleteDuplicates(ListNode *head) {
        ListNode* dummy = new ListNode(-1);
        dummy->next = head;
        ListNode* pPrePre = dummy;
        if (pPrePre == NULL) return dummy->next;
        ListNode* pPre = pPrePre->next;
        if (pPre == NULL) return dummy->next;
        ListNode* pCur = pPre->next;
        if (pCur == NULL) return dummy->next;
        while (!(pPrePre == NULL || pPre == NULL || pCur == NULL) )// not end
        {
            bool eq = false;
            while (pCur != NULL && pPre->val == pCur->val)
            {
                eq = true;
                pPre->next = pCur->next;
                pCur = pCur->next;
            }
            if (eq)
            {
                pPrePre->next = pCur;
                pPre = pCur;
                if (pCur != NULL)
                {
                    pCur = pCur->next;
                }
            }
            else
            {
                pPrePre = pPre;
                pPre = pCur;
                if (pCur != NULL)
                {
                    pCur = pCur->next;
                }
            }
        }
        return dummy->next;
    }
};

  

原文地址:https://www.cnblogs.com/lautsie/p/3352747.html