1. 先上代码:先准备好一个 1 2 3 的链表 temp
function ListNode(val, next) {
this.val = (val===undefined ? 0 : val)
this.next = (next===undefined ? null : next)
}
let temp = new ListNode(1, new ListNode(2, new ListNode(3, new ListNode)));
2. 铺垫一下知识,请看如下问题:定义两个不相关的节点node_A 和 node_B,可以自己run一下。
let node_A = new ListNode(1);
let node_B = new ListNode(2);
let temp = node_A
temp.next = node_B
那么 node_A.next ?
答案: 输出 node_B。
3. 能理解上面这一点,下面反转也就很好理解了。先附上完整的反转代码:
function ListNode(val, next) {
this.val = (val===undefined ? 0 : val)
this.next = (next===undefined ? null : next)
}
let head = new ListNode(1, new ListNode(2, new ListNode(3)));
let reverseList = function(head) {
if (head == null || head.next == null) {
return head; // 如果链表只有一个元素或者是空链表,我们直接返回
}
let newHead = reverseList(head.next);
head.next.next = head;
head.next = null;
return newHead;
}
reverseList(head)
理解一下这个递归过程
借助引用类型数据的特性和递归的特性。