19. Remove Nth Node From End of List
題目網址:https://leetcode.cn/problems/remove-nth-node-from-end-of-list/
題意:給一 linked list, 請刪除倒數第
n個 node, 並返回 linked list 的 head。進階:試著用一次掃描就完成。

Solution:
想法:利用 slow & fast pointers, 用
dummy是因為有可能第一個 node 被刪, 所以需要有 ptr 指著第一個 node 的前一個 node。首先fast先從 head 走n步(讓fast領先), 然後slow才從dummy開始往前走, 直到fast變成NULL
- 為什麼
fast是初始化為head, 而slow初始化為dummy?
因為若fast和slow都初始化為head, 則當fast為NULL時,slow恰好在倒數第n個 node(因為fast領先n步), 但是我們是要刪除倒數第n個 node, 要取得的是倒數第n個 node 的前一個節點(倒數第n + 1的 node), 故讓 slow 在初始化時就慢fast一步, 讓fast領先n + 1步, 這樣slow最後才會是倒數第n + 1的 node
class Solution{ |
- time:$O(L)$ ➔ 遍歷 linked list, 其中
L為 linked list 的長度 - space:$O(1)$ ➔ 只需常數空間
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論