LeetCode 题解: 206. 反转链表,JavaScript,容易理解的递归解释,详细注释
原题链接:https://leetcode-cn.com/problems/reverse-linked-list/
假设有链表1->2->3->4->5->NULL
,那么递归的步骤如下:
当递归到最深处时,此时运行的是reverseList(5),那么返回的是5。
reverseList(5)的上一层就是reverseList(4),此时运行步骤如下:
- headNext
其实是5,此时链表还是1->2->3->4->5->NULL
`
- 当运行head.next.next = head;
后,实际上是把5的指向修改成了4,此时链表变成了1->2->3->4<=>5
,4和5互相指向了。
- 当运行head.next = null;
后,链表变成了1->2->3->4<-5
+4->NULL
,需要注意的是,此时4被3和5同时指向,而且4还有个隐藏的指向为null。
- 上面的写法只是为了帮助理解,实际上链表已经被拆成了两段,分别为1->2->3->4
和NULL<-4<-5
。
- 最后reverseList(4)的返回值其实是5->4
reverseList(4)的上一层是reverseList(3),此时运行步骤如下:
- headNext
其实是5->4
,此时链表是1->2->3->4<-5
+4->NULL
- 当运行head.next.next = head;
后,3和4的指向被翻转,而此时还存在一个5->4
的指向,那么链表变成了1->2->3<=>4<->5
,3和4互相指向了。
- 当运行head.next = null;
后,链表变成了1->2->3<-4<-5
+3->NULL
,需要注意的是,此时3被2和4同时指向,而且3还有个隐藏的指向为null。
- 上面的写法只是为了帮助理解,实际上链表已经被拆成了两段,分别为1->2->3
和NULL<-3<-4<-5
。
- 最后reverseList(3)的返回值其实是5->4->3
。
之后的递归就是不断重复上面的步骤,最终返回的结果就为
NULL<-1<-2<-3<-4<-5
。
版权声明: 本文为 InfoQ 作者【Lee Chen】的原创文章。
原文链接:【http://xie.infoq.cn/article/32e809ed1e85ca2f9d801eaeb】。文章转载请联系作者。
评论