給出乙個鍊錶,返回鍊錶的反轉,例如
輸入: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...