递归算法要先找到出口
<script>
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 everone(node){
// var temp = node;
// while(true){
// if(temp !== null){
// console.log(temp.value)
// }else{
// break
// };
// temp =temp.next
// }
// }
// 链表递归遍历
function everone(node){
if( node == null) return;
console.log(node.value)
everone(node.next)
}
// everone(node1)
// 链表逆转
function revser(node){
// 出口
if(node.next.next == null){ //表示node是倒数第二个节点
node.next.next = node // 让最后有一个节点反转指向自己
return node.next // 返回最后一个节点
}else{
var result = revser(node.next) //让下一个节点反转
node.next.next = node;// 让上一个节点反转指向自己
node.next = null; //每次递归都让上一个节点成为最后一个节点,然后进入出口把他返回出去
return result
}
}
var newLink = revser(node1)
everone(newLink)
</script>