敘述
這是 Algorithm I
第五天第二個題目,總共有兩題。
- 難度:
Medium
- 花費時間: 1hr
- 題目
給你一個 linked list 的 head 和一個數字 n ,刪除這個 List 從後面數過來的第 n 個 node 然後回傳 head 。
點我開啟限制與範例
限制:
- The number of nodes in the list is
sz
. 1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz
Example 1:
1 | Input: head = [1,2,3,4,5], n = 2 |
Example 2:
1 | Input: head = [1], n = 1 |
Example 3:
1 | Input: head = [1,2], n = 1 |
筆記
Two Pointer 作法如下:
- mainPointer: 一次一步,遍歷列表。
- delayPointer: 一次一步,但晚 mainPointer n+1 步出發。
當 mainPointer 走到底時,把delayPointer的 next 換成 next.next 然後回傳 head 。
- 例外處理: 當迴圈跑完 delayPointer 都沒有動的時候,這就代表 n > List.length - 1 所以這個時候我們要判斷:
- n == List.length => 回傳 temp.next (代表他移除的正好就是 head)
- n == List.length - 1 => 一樣回傳 head 但是要把第二個 node 移除。
1 | /** |