[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;

    }

};

  

你可能感兴趣的:(LeetCode)