一、找到最后一个节点
function Node(value){
this.value = value;
this.next = null;
}
node1 = new Node(1);
node2 = new Node(2);
node3 = new Node(3);
node4 = new Node(4);
node5 = new Node(5);
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
function reverse(root){
if(root.next != null){
return reverse(root.next);
} else{
return root;
}
}
console.log(reverse(node1));
二、链表的逆置
function Node(value) {
this.value = value;
this.next = null;
}
node1 = new Node(1);
node2 = new Node(2);
node3 = new Node(3);
node4 = new Node(4);
node5 = new Node(5);
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
function reverse(root) {
if (root.next.next == null) { //1.倒数第二个节点
root.next.next = root; //2.最后一个节点指向倒数第二个节点
return root.next; //5.返回最后一个根节点
} else {
let result = reverse(root.next); //6.拿到一个结果
root.next.next = root; //3.自己的下一个节点指向自己
root.next = null; //4.自己指向空(避免死循环)
return result; //7.返回结果
}
}
let newNode = reverse(node1);
// 遍历
function forEachNode(root) {
if (root == null) return;
console.log(root.value);
forEachNode(root.next);
}
forEachNode(newNode);