TL;DR
用轮回的体式格局反转链表,系列目次见 前言和目次 。
需求
完成要领 reverse()
用轮回的体式格局反转链表,链表应当只遍历一次。注重这个函数直接修正了链表自身,所以不需要返回值。
var list = 2 -> 1 -> 3 -> 6 -> 5 -> null
reverse(list)
list === 5 -> 6 -> 3 -> 1 -> 2 -> null
解法
代码以下:
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
的第二个节点就行。