題目描述:
給定乙個鍊錶,刪除鍊錶的倒數第 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....