##description:
reverse a singly linked list.
##問題描述:
反轉鍊錶。----in place操作,不要新開空間
給定鍊錶的頭結點,得到反轉鍊錶的頭結點。
##解法一(迭代解法–尾插法)
###思路:直觀感覺是將鍊錶的指向全部反向,但是要先用臨時結點儲存後一結點資訊,以免反向後找不到後一節點,迭代之前初始化prev空結點來作為reverse後鍊錶的頭結點。每輪更新prev和head向前移動。
此類解法比較適合於微操的情況, 比如[a, b)這種前閉後開區間…
###code:
public class solution
listnode prev = null;
while (head != null)
return prev;
}}
##解法二(遞迴解法)
###思路:
假設鍊錶有n個結點,先遞迴顛倒最後n-1個結點,然後小心地將原煉表中的首結點插入到結果鍊錶的末端
利用遞迴遍歷到鍊錶的尾部
###code:
/**
* definition for singly-linked list.
* public class listnode
* }*/public class solution
}
核心思路:
將鍊錶區別[a, b)反轉, 注意是前閉後開.
思路同非遞迴單鏈表反轉.
class
solution
b = b.next;
} listnode newhead =
reverse
(a, b)
; a.next =
reversekgroup
(b, k)
;return newhead;
}private listnode reverse
(listnode a, listnode b)
return pre;
}}
鍊錶反轉總結
遞迴反轉鍊錶 比如現在有這樣乙個鍊錶 k 1 rightarrow k 2 rightarrow rightarrow k rightarrow k rightarrow rightarrow k 若 k 之後的鍊錶都已經完成了反轉,如下 k 1 rightarrow k 2 rightarrow ...
鍊錶 反轉鍊錶
問題 兩兩交換鍊錶中的節點 問題 k 個一組翻轉鍊錶 問題鏈結 利用棧先進後出的特性,遍歷鍊錶,將每個結點加入棧中,最後進行出棧操作,先出棧的結點指向臨近的後出棧的結點。definition for singly linked list.struct listnode class solution ...
leetcode 反轉鍊錶問題總結
第一次被問反轉鍊錶是被位元組,我沒想出來。後來在劍指offer上面看到了,我沒做出來。在leetcode和牛客上遇見,是那麼的熟悉。今天的每日一題還是思路不清晰。我意識到,我是時候寫點什麼了。希望下次遇到的時候思路清晰,一招斃命。反轉鍊錶i 反轉鍊錶ii 反轉鍊錶i是把整個鍊錶都反轉,相對來說容易一...