1. 程式人生 > 其它 >leetcode刷題---熱門百題---刪除連結串列的倒數第n個節點

leetcode刷題---熱門百題---刪除連結串列的倒數第n個節點

技術標籤:leetcode刷題leetcode連結串列

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

進階:你能嘗試使用一趟掃描實現嗎?
在這裡插入圖片描述輸入: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

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list

著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

下面是自己寫的程式碼,思路就是用兩個指標,然後中間間隔n個,這樣快的指標到最後的時候,慢的指標剛好是倒數第n個的前一個,再進行刪除即可.

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
    ListNode pre = new ListNode();
    pre.next = head;
    ListNode cur = head;
    ListNode bac = pre;

    int now =
0; while(cur != null){ cur = cur.next; if(now >= n ){ bac = bac.next; } now++; } bac.next = bac.next.next; return pre.next; } }

下面是題解的程式碼,思路是一樣的,不過寫的方法不一樣,感覺更好理解點

class Solution {
    public ListNode removeNthFromEnd(ListNode head,
int n) { ListNode dummy = new ListNode(0, head); ListNode first = head; ListNode second = dummy; for (int i = 0; i < n; ++i) { first = first.next; } while (first != null) { first = first.next; second = second.next; } second.next = second.next.next; ListNode ans = dummy.next; return ans; } } 作者:LeetCode-Solution 連結:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/solution/shan-chu-lian-biao-de-dao-shu-di-nge-jie-dian-b-61/ 來源:力扣(LeetCode) 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。