反转链表的递归写法,最终的返回值是为什么会是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回答

liuyubobobo

2020-08-12

因为最终返回的是翻转链表的头结点。rev 是翻转后链表的头结点。


再结合 3:10 的动画,理解一下这个过程是怎么回事儿?注意,在这里,我没有做整个翻转链表这个递归过程的微观过程解读。如果有必要,请参考这周 2-5 的方式,对一个小规模的测试用例,三四个节点就可以,详细模拟一下,整个算法每句话执行以后,程序中的各个变量都指向谁?最终为什么得到了翻转链表的结果?


或者使用 2-6 的方式,用一个具体的测试用例实际单步跟踪一下,看看程序在执行过程中都发生了什么?每一个变量在程序执行过程中是在如何变化的?


理解算法切不可仅仅盯着代码去想,一定要亲自动手调试。进步就发生在这个过程中哦。


加油!:)


0

算法与数据结构

波波老师5年集大成之作,算法与数据结构系统学习,考试、面试、竞赛通用

2638 学习 · 1091 问题

查看课程