用循环的方式反转链表,系列目录见 前言和目录 。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