牛客(刪除連結串列中重複節點)

July yi發表於2021-01-01

題目要求:

在這裡插入圖片描述
題目連結

方法:直接刪除法

在遍歷單連結串列的時候,檢查當前節點與下一點是否為相同值,如果相同,繼續查詢相同值的最大長度,然後指標改變指向。

圖示:
在這裡插入圖片描述
在這裡插入圖片描述在這裡插入圖片描述實現程式碼:

class Solution {
public:
    ListNode* deleteDuplication(ListNode* pHead)
{
        //連結串列為空連結串列或者只有一個結點,直接返回頭節點
        if(pHead==NULL || pHead->next==NULL)
            return pHead;
        //pre結點用來連結非重複節點
        ListNode *pre = NULL;
        ListNode *cur = pHead;
        ListNode *next = pHead->next;
        while(next)
        {
            //如果cur->val 和 next->val不同,pre cur next一起往後移動
            if(cur->val != next->val)
            {
                pre = cur;
                cur = next;
                next = next->next;
            }
            else
            {
                //尋找和當前cur->vsl相同的所有節點
                while(next && cur->val==next->val)
                {
                    next = next->next;
                }
                if(pre)
                    pre->next = next;
                else
                    //如果當前pre是NULL,將next作為頭節點
                    pHead = next;
                //將重複節點釋放
                while(cur!=next)
                {
                    ListNode *del = cur;
                    cur = cur->next;
                    free(del);
                }
            }
            if(cur)
                next = cur->next;
        }
        return pHead;
    }
};

相關文章