node.next
指向下一个节点node.next
指向倒数第二个节点node.next
指向null,这个时候的链表仍然是连续的
node.next
指向null?node.next
指向倒数第二个节点?node.next
去表示下一个节点,使用node.next.next
表示最后一个节点的nextnode.next.next
指向前一个节点node
,然后让node
的next指向nullnode.next.next
为null的节点,然后用上述方法改变指向// 创建一个节点的类
class Node {
constructor(value) {
this.value = value
this.next = null
}
}
// 创建节点
const node1 = new Node(1)
const node2 = new Node(2)
const node3 = new Node(3)
const node4 = new Node(4)
const node5 = new Node(5)
const node6 = new Node(6)
// 将所有的节点穿成一个串,形成一个链表
node1.next = node2
node2.next = node3
node3.next = node4
node4.next = node5
node5.next = node6
const reverseLink = root => {
if (root.next.next === null) { // 当前root为倒数第二个节点
root.next.next = root // 最后一个节点指向前一个节点
return root.next // 返回最后一个节点
} else {
let result = reverseLink(root.next)
root.next.next = root // 当前节点的后一个节点的next指向当前节点
root.next = null // 让当前节点的next指向null
console.log(result)
return result
}
}
const newRoot = reverseLink(node1)
// 遍历逆置后的链表
const traverseLink = newRoot => {
if (newRoot === null) {
return
}
console.log(newRoot.value)
// 使用递归旁遍历当前链表
traverseLink(newRoot.next)
}
traverseLink(newRoot)
原文:https://www.cnblogs.com/lxqddd/p/12183320.html