创建一个链表
class Node{
constructor(value){
this.value=value
this.next=null
}
}
// 实例对象
const a=new Node(1)
const b=new Node(2)
const c=new Node(3)
const d=new Node(4)
// 构建链表
a.next=b
b.next=c
c.next=d
// 执行逆置
/*
root.next.next=null是出口
root.next=null说明 此时root是最后一个节点 如果要逆置 则需要两个节点
root.next.next是倒数第二个节点,现在我们找到了最后一个节点,让最后一个节点的指向 变为倒数第二个节点 也就是 root.next.next=root
然后返回 最后一个节点,return root.next
然后我们使用递归传入root.next,也就是root的前一个结点继续更改指向
当进入当原本的第二个节点时(root.next)此时第三个节点指向第二个节点
又因为 传入的参数是root.next 所以不能返回第一个节点,在递归跳出来之后 手动指定第二个指向第一个
第一个指向null
*/
function reverse(root){
if(root.next.next==null){
root.next.next=root
return root.next
}else{
var q=reverse(root.next)
// 让原本第二个节点指向第一个节点
root.next.next=root
// 让第一个节点指向null
root.next=null
// 返回递归的值 如果不返回则会无限递归
return q
}
}
// 遍历链表
function travel(root){
if(root==null)return
console.log(root.value)
travel(root.next)
}
travel(reverse(a))