[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;
    }
};
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号