LeetCode19題 刪除連結串列的倒數第N個節點 (c++ 遞迴)

我渴望頭髮發表於2020-10-08

LeetCode19題 刪除連結串列的倒數第N個節點 (c++ 遞迴)

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

示例:

給定一個連結串列: 1->2->3->4->5, 和 n = 2.

當刪除了倒數第二個節點後,連結串列變為 1->2->3->5. 說明:

給定的 n 保證是有效的。

進階:

你能嘗試使用一趟掃描實現嗎?

分析:用作雙指標的話很簡單,但這次用了遞迴的方法,時空複雜度都很感人。。。。。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
int cnt=0;
bool remove(ListNode *&a,int count)
        {
            if(a->next==NULL||remove(a->next,count))    //注意邊界的情況
            cnt++;
            if(cnt==count)
            a=a->next;                   
            return true;
        }
    ListNode* removeNthFromEnd(ListNode* head, int n) 
    {
        remove(head,n);
        return head;
    }
};

在這裡插入圖片描述

相關文章