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

2021-10-06 10:22:03 字數 1288 閱讀 2668

難度:中等

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