先准备一个链表
// 定义节点构造函数
function Node(value){
this.value = value;
this.next = null;
}
// 初始化5个node实例
let node1 = new Node(1);
let node2 = new Node(2);
let node3 = new Node(3);
let node4 = new Node(4);
let node5 = new Node(5);
// 将这5个实例串联起来,形成一个链表
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
/**
* 逆置链表的方法
* @param root 根节点
function nizhi(root){
if(root.next.next === null){ // 代表当前节点(root)是倒数第二个节点
root.next.next = root; // 让最后一个节点指向(root.next)自己(倒数第二个节点)
return root.next; // 递归的出口,返回最后一个根节点(node5);
} else {
let nextNode = nizhi(root.next); // 调用下一个节点
// 如果不是末级(node5),则让下一个节点的next指向自己
root.next.next = root; // (node2的next指向node1;node3的next指向node2;以此类推...)
root.next = null; // node1的next指向null
return nextNode; // 递归结束,返回最后一个被遍历的节点
}
}
// 调用逆置函数
nizhi(node1)
如下图所示,逆置成功