Leetcode實戰: 19.刪除鏈表的倒數第n個節點

題目:

給定一個鏈表,刪除鏈表的倒數第 n 個節點,並且返回鏈表的頭結點。

示例:

給定一個鏈表: 1->2->3->4->5, 和 n = 2.

當刪除了倒數第二個節點後,鏈表變爲 1->2->3->5.

分析:
雙指針。
先令虛擬節點 firHead 指向 head,設定雙指針llmm,初始都指向firHead。
移動mm,直到llmm之間相隔的節點個數爲 n,然後同時移動llmm,直到mm指向的爲 NULL時,ll的下一個節點就是要刪除的節點。
ll的下個節點指向ll的下下個節點,就刪除了倒數第n個節點。

代碼如下:

class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n)
    {
        ListNode* firHead = new ListNode(0);
        firHead->next = head;
        ListNode* l = firHead;
        ListNode* m = firHead;
        for (int i = 0; i < n + 1; i++) {
            m = m->next;
        }#令兩個節點間隔n個節點
        while (m) {
            l = l->next;
            m = m->next;
        }#兩個指針同時向後移動,直到m爲NULL
        ListNode* delNode = l->next;
        #要刪除的節點是l後面的節點
        l->next = delNode->next;
        #令l指向l的下下個節點
        delete delNode;
        ListNode* result = firHead->next;
        delete firHead;
        return result;
    }
};

運行結果:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章