leetcode 練習 反轉鍊錶

2022-07-11 13:15:13 字數 1277 閱讀 4660

最近開始學習資料結構和演算法的學習,也自然開始在 leetcode 上練習,所以每週大概會分享做過的leetcode 練習,盡量做到每天更新一道題目。

作為 leetcode 練習筆記的第一道題目,選擇了一道很經典的題目,反轉鍊錶。這是 leetcode 上的 206 題,鏈結如下:

input: 1->2->3->4->5->null

output: 5->4->3->2->1->null

反轉乙個單鏈表,首先肯定需要遍歷這個單鏈表,在遍歷的時候就希望修改當前結點的next指標,指向其前乙個結點,因此肯定需要乙個儲存前乙個結點的變數,也就是反轉後鍊錶的頭部指標。

實現的思路應該是這樣的:

首先定義乙個prev儲存前乙個結點,curr儲存當前結點,然後還有乙個nxt儲存下乙個結點,其中prev就是最終的反轉鍊錶的頭結點;

先讓nxt儲存下乙個結點;

然後改變currnext指標,指向前乙個結點,即prev;

接著,讓prev = curr

最後,就是讓curr = nxt,指向下乙個結點

重複 2-5 步,直到當前結點為空。

下圖展示了上述幾個步驟的過程:

利用 python 的特性,實現的時候關鍵**其實就一行即可。

class

listnode:

def__init__

(self, x):

self.val = x

self.next = none

class

solution:

defreverselist

(self, head: listnode) -> listnode:

pre, cur = none, head

while cur:

pre, pre.next, cur = cur, pre, cur.next

return pre

LeetCode 反轉鍊錶

反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null高階 你可以迭代或遞迴地反轉鍊錶。你能否用兩種方法解決這道題?思路 雙指標,先用乙個指標算出鍊錶結點個數n,每次快指標從頭往先前移動n 步,慢指標往前移動1步進行交換即可。definition for sin...

LeetCode 反轉鍊錶

反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null 思路分析 直接一趟掃瞄即可。方法二 遞迴 definition for singly linked list.struct listnode class solution listnode reversea...

反轉鍊錶 LeetCode

遞迴版本稍微複雜一些,其關鍵在於反向工作。假設列表的其餘部分已經被反轉,現在我該如何反轉它前面的部分?假設列表為 n1 nk 1 nk nk 1 nm 若從節點 nk 1 到 nm 已經被反轉,而我們正處於 nk n1 nk 1 nk nk 1 nm 我們希望 nk 1 的下乙個節點指向 nk 所以...