leetcode演算法題 刪除鍊錶的倒數第N個節點

2022-07-07 08:27:20 字數 1384 閱讀 2701

本題為leetcode探索初級演算法中煉表章節的一題

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

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

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

給定的 n 保證是有效的。

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

/**

* definition for singly-linked list.

* public class listnode

* }*/class solution

if(n == length)

listnode removeprehead = head;

while(length != n + 1)

removeprehead.next = removeprehead.next.next;

return head;}}

思路就是第一次迴圈得到長度,知道長度後刪除倒數第n個就容易了。總共迴圈了兩次,未能達到高階要求。

解法一:

複雜度分析:

時間複雜度:o(l)o(l),該演算法對列表進行了兩次遍歷,首先計算了列表的長度 ll 其次找到第 (l - n)(l−n) 個結點。 操作執行了 2l-n2l−n 步,時間複雜度為 o(l)o(l)。

空間複雜度:o(1)o(1),我們只用了常量級的額外空間。

跟我的思路大致相同,官方中使用了啞結點作為輔助,有效的避免極端情況,而我都是通過提前判斷來實現的。

解法二:

}複雜度分析:

時間複雜度:o(l)o(l),該演算法對含有 ll 個結點的列表進行了一次遍歷。因此時間複雜度為 o(l)o(l)。

空間複雜度:o(1)o(1),我們只用了常量級的額外空間。

解法二使用兩個指標先讓第乙個指標a移動n個距離,在兩個指標一起移動,直到指標a移動到結尾。非常巧妙,學習了!

Leet Code演算法題(反轉鍊錶)

c 解題思路,如何反轉乙個鍊錶 將head放到最後一位 head next作為head 重複操作 看 首先這是乙個鍊錶 定義幾個指標 listnode prep null,curp head,nextp head next 然後執行 curp next prep 將head放到最後 prep cur...

LeetCode演算法題 環形鍊錶

給定乙個鍊錶,判斷鍊錶中是否有環。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。示例1 輸入 head 3,2,0,4 pos 1 輸出 true 解釋 鍊錶中有乙個環,其尾部連線到第二個節點。示例 2 輸入...

leetcode演算法題 重排鍊錶

1 map void reorderlist listnode head for int i 0,j n 1 i,j 2 遞迴 void reorderlist listnode head int len 0 listnode p head while p null reorderlisthelpe...