leetcode 206 反转链表(递归)JavaScript

leetcode 206 反转链表(递归)JavaScript
在之前写的文章里,用的是迭代实现反转链表,由于之前一直不理解递归如何实现,如今抽空研究了一番,理解思路后,特此回来写一下文章。
递归的要点在于最深处时的判断条件,并将结果进行return,然后向上不断地返回得到结果。

var reverseList = function(head) {
    if (head == null || head.next == null) {
        return head;
    }
    const newHead = reverseList(head.next);
    head.next.next = head;
    head.next = null;
    return newHead;
};

由代码分析,可以看出来,递归在newHead调用该函数这里,假设我们的链表是1-2-3-4-5,根据if的条件,因为传入的是head.next,也就是说 当我们head在4的时候,传入的是5,由if可知此时已经终止了,return head得到4 所以newHead = 4
下一句代码比较难理解,其实它这里就是在做反转,4的next是5,所以这句代码相当于:5的next指向4
再下一句 创建一个空的尾部让4的next去指向
最后return 4的时候,本次这个最终的递归已经结束了,开始往上一次递归寻找,
也就是3 以此类推一直到1 递归结束 所以最后的链表也反转好了 真的神奇…
这里推荐大家看一下这个动画演示
https://leetcode-cn.com/problems/reverse-linked-list/solution/dong-hua-yan-shi-206-fan-zhuan-lian-biao-by-user74/

你可能感兴趣的:(JavaScript,javascript,leetcode,vue.js)