19 刪除連結串列的倒數第 N 個結點(LeetCode HOT 100)
阿新 • • 發佈:2022-04-10
描述:
給你一個連結串列,刪除連結串列的倒數第 n 個結點,並且返回連結串列的頭結點。
示例 1:
輸入:head = [1,2,3,4,5], n = 2
輸出:[1,2,3,5]
示例 2:
輸入:head = [1], n = 1
輸出:[]
示例 3:
輸入:head = [1,2], n = 1
輸出:[1]
提示:
連結串列中結點的數目為 sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz
Soulution:
public static ListNode removeNthFromEnd(ListNode head, int n) { // 避免只有一個結點的情況,我們使用哨兵優化 ListNode sentry = new ListNode(-1, head); ListNode sp = sentry; ListNode fp = sentry; // 快指標先走 for (int i = 0; i < n; ++i) { fp = fp.next; } // 快指標到末尾時,慢指標剛好到倒數第n個結點前 while (fp != null && fp.next != null) { fp = fp.next; sp = sp.next; } sp.next = sp.next.next; return sentry.next; }
Idea:
快慢指標,O(n)時間找到倒數第N個結點,並完成remove。
哨兵結點,簡化邊界條件處理,如只有一個結點的情況。
Reslut: