難度:中等
給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。
示例:
給定乙個鍊錶: 1->2->3->4->5, 和 n = 2.
當刪除了倒數第二個節點後,鍊錶變為 1->2->3->5.
說明:
給定的 n 保證是有效的。
高階:
你能嘗試使用一趟掃瞄實現嗎?
遍歷鍊錶,計算出鍊錶長度len,然後計算出需要刪除的結點的下標位置tag = len - n;
再遍歷鍊錶,讓需要刪除的結點的上乙個結點的next指向需刪除結點的next結點。
複雜度分析
時間複雜度:o(l),該演算法對列表進行了兩次遍歷,首先計算了列表的長度 l其次找到第 (l - n) 個結點。 操作執行了 2l-n 步,時間複雜度為 o(l)。
空間複雜度:o(1),我們只用了常量級的額外空間。
/**
* definition for singly-linked list.
* public class listnode
* }*/class
solution
listnode node = head;
while
(node.next!=null)
node = head;
int tag = len - n;
if(tag ==0)
while
(node.next!=null)
node = node.next;
}return head;
}}
我們可以使用兩個指標l和r來遍歷陣列 , 先讓兩個結點的距離相聚n-1 , 起初讓兩個指標都指向頭結點 , 然後先讓r指標向後移動 n-1個結點。然後同時移動兩個指標,當r指標移動到最後乙個的時候,l指標指向的剛好是需要刪點的結點。
/**
* definition for singly-linked list.
* public class listnode
* }*/class
solution
while
(r!=null)
l.next = l.next.next;
return dummy.next;
}}
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....