反转链表的递归写法,最终的返回值是为什么会是rev,不太理解
来源:3-3 翻转链表的递归实现
慕娘1234912
2020-08-12 12:44:17
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
//反转后的节点
ListNode result = reverseList(head.next);
head.next.next = head;
head.next = null;
return result;
}
1回答
因为最终返回的是翻转链表的头结点。rev 是翻转后链表的头结点。
再结合 3:10 的动画,理解一下这个过程是怎么回事儿?注意,在这里,我没有做整个翻转链表这个递归过程的微观过程解读。如果有必要,请参考这周 2-5 的方式,对一个小规模的测试用例,三四个节点就可以,详细模拟一下,整个算法每句话执行以后,程序中的各个变量都指向谁?最终为什么得到了翻转链表的结果?
或者使用 2-6 的方式,用一个具体的测试用例实际单步跟踪一下,看看程序在执行过程中都发生了什么?每一个变量在程序执行过程中是在如何变化的?
理解算法切不可仅仅盯着代码去想,一定要亲自动手调试。进步就发生在这个过程中哦。
加油!:)
相似问题