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!
評論