19 刪除鍊錶的倒數第N個節點

2021-09-13 18:31:47 字數 937 閱讀 3868

題目描述:

給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。

示例:

給定乙個鍊錶: 1->2->3->4->5, 和 n = 2.

當刪除了倒數第二個節點後,鍊錶變為 1->2->3->5.

說明:

給定的 n 保證是有效的。

高階:

你能嘗試使用一趟掃瞄實現嗎?

解題思路:

這是一道簡單題。高階要求使用一趟掃瞄實現,雙指標是鍊錶慣用方法。

定義兩個指標,p、pre全都指向鍊錶頭部,然後pre指標先走n步,然後兩個鍊錶一起走,直到pre指標走到鍊錶尾,這時p.next即為待刪除結點。因為p、pre同時走,保持間距一直為n,則當pre走到鍊錶尾時,p的下乙個結點就是倒數第n個結點。

不過要注意,待刪除結點是頭結點的時候。也就是說假如鍊錶長5,刪除倒數第5個結點時。這時,對應的情況是 pre走到末尾的下乙個結點,也就是已經為空,則說明 要刪除的結點為頭結點,這時直接返回head.next。即將頭結點去除,頭結點下乙個結點變為新的頭結點。

**實現:

public listnode removenthfromend(listnode head, int n) 

if(pre == null)

while(pre.next != null)

listnode tobedeletednode = p.next;

p.next = tobedeletednode.next;

tobedeletednode = null;

return head;

}

19 刪除鍊錶的倒數第N個節點

給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。示例 給定乙個鍊錶 1 2 3 4 5,和 n 2.當刪除了倒數第二個節點後,鍊錶變為 1 2 3 5.說明 給定的 n 保證是有效的。高階 你能嘗試使用一趟掃瞄實現嗎?說實話,就我的水平而言感覺這道題坑點還真不少,先來我的乙個粗糙版...

19 刪除鍊錶的倒數第N個節點

給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。示例 給定乙個鍊錶 1 2 3 4 5,和 n 2.當刪除了倒數第二個節點後,鍊錶變為 1 2 3 5.說明 給定的 n 保證是有效的。高階 你能嘗試使用一趟掃瞄實現嗎?class solution def removenthfrom...

19 刪除鍊錶的倒數第N個節點

給定乙個鍊錶,刪除鍊錶的倒數第n個節點,並且返回鍊錶的頭結點。給定乙個鍊錶 1 2 3 4 5,和 n 2.當刪除了倒數第二個節點後,鍊錶變為 1 2 3 5.給定的n保證是有效的。首先遍歷得出鍊錶的長度l,然後刪除第l n個節點 definition for singly linked list....