演算法學習 反轉鍊錶的兩種方法 棧 遞迴

2021-10-07 15:52:35 字數 1123 閱讀 1720

給出乙個鍊錶,返回鍊錶的反轉,例如

輸入:1->2->3->4->5->null

輸出:5->4->3->2->1->null

這個做法是比較先想到的,棧的先進後出的特點能很好地幫助我們實現反轉,步驟也比較簡單,就是空間複雜度是o(n),所以其實這種做法是不太好的

public listnode reverse1

(listnode head)

listnode ans =

newlistnode(0

);//設定乙個臨時結點,用來把棧中的結點加入到鍊錶中

listnode temp = ans;

while

(!stack.

isempty()

)return ans.next;

}

其實主要是想記錄一下遞迴的這種解法,因為有點繞,自己寫一下的話肯定會加深一下印象

我們的初始狀態是

要得到的結果是

遞迴要完成的工作是(就上圖而言):

看圖示是不是更清楚了,**如下

public listnode reverse2

(listnode head)

如果還不清楚的話,跟著**自己敲一遍,應該就能理解了。

反轉鍊錶 清晰易懂的兩種方法

反轉乙個單鏈表。如下示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null public class listnode 一 迭代法 注意觀察示例 1 2 3 4 5 null的反轉可以看成 null 1 2 3 4 5。會發現鍊錶的反轉基本上就是箭頭的方向的反轉,即節點前驅和後...

演算法學習 反轉鍊錶

輸入乙個鍊錶的頭結點,將這個鍊錶反轉並輸出它的新的頭結點 public class listnode 方法一 public class solution h1.next null return head 方法二 其實我寫的這兩個差不多,為什麼要寫相似的兩個?因為我要學習區別使用p和p.next的區別...

206 反轉鍊錶(兩種方法 迭代和遞迴)

解題思路 1.迭代 建立乙個新的鍊錶的啞巴節點root,建立乙個過度指標n,使用頭插法將head鍊錶中的元素取出插入root鍊錶中,返回root.next class solution listnode root new listnode 0 listnode n null while head n...