上一篇:
前端必会算法——线性数据结构的递归遍历
链表的逆置
代码演示:
function Node(value) {
this.value = value;
this.next = null;
}
var node1 = new Node(1);
var node2 = new Node(2);
var node3 = new Node(3);
var node4 = new Node(4);
var node5 = new Node(5);
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
//逆置
function inversion(root) {
//代表当前节点是倒数第二个节点
if (root.next.next === null) {
// 让最后一个节点指向自己(倒数第二个节点
root.next.next = root;
return root.next;
} else {
// 先找递归的出口
var result = inversion(root.next);
root.next.next = root;
root.next = null;
return result;
}
}
//逆置后的链表遍历
var newRoot = inversion(node1);
function ergodic(root) {
if (root === null) return;
console.log(root.value);
ergodic(root.next);
}
ergodic(newRoot);
运行结果:
下一篇:
前端必会算法——冒泡排序