用循環的方式反轉鏈表,系列目錄見 前言和目錄 。node
實現方法 reverse()
用循環的方式反轉鏈表,鏈表應該只遍歷一次。注意這個函數直接修改了鏈表自己,因此不須要返回值。git
var list = 2 -> 1 -> 3 -> 6 -> 5 -> null reverse(list) list === 5 -> 6 -> 3 -> 1 -> 2 -> null
代碼以下:github
function reverse(list) { if (!list) return null let result for (let node = list; node; node = node.next) { result = new Node(node.data, result) } list.data = result.data list.next = result.next }
思路是,從前到後遍歷鏈表,對每一個節點複製一份,並讓它的 next
指向前一個節點。最後 result
就是一個反轉的新鏈表了。那麼如何修改 list
呢?很簡單,把 result
的首節點值賦給 list
,而後讓 list
指向 result
的第二個節點就行。segmentfault