LeetCode 之 JavaScript 解答第21题 —— 兼并两个有序链表(Merge Two Sorted Lists)

Time:2019/4/9
Title: Merge Two Sorted Lists
Difficulty: Easy
Author: 小鹿

题目:Merge Two Sorted Lists

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.

Example:

Input: 1->2->4, 1->3->4
Output: 1->1->2->3->4->4

Solve:

▉ 算法思绪

1、一般思绪,轮回遍历迭代比较大小,每掏出一个数据,将小数据加入到分外的数组中去,直到比较终了,将个中一个盈余的数组追加到分外的数组尾部。

2、递归思绪,满足递归的三个前提:

  • 将题目能不能化为子题目去处理?
  • 子题目的处理体式格局是不是和总题目类似?
  • 是不是有停止前提?
▉ 递归完成
var mergeTwoLists = function(l1, l2) {
    let result = null;
    //停止前提
    if(l1 == null) return l2;
    if(l2 == null) return l1;

    //推断数值大小递归
    if(l1.val < l2.val){
        result = l1;
        result.next = mergeTwoLists(l1.next,l2);
    }else{
        result = l2;
        result.next = mergeTwoLists(l2.next,l1);
    }

    //返回效果
    return result;
};
▉ 怎样明白递归?

实在递归最难的就是我们应当怎样去明白它,当我们完整明白了递归以后,就会发明递归异常轻易,代码简约。

我们常常明白递归会堕入到递归的细节上去,每每只递,归的时刻就完整隐约了,我也试着找了网上的关于递归诠释的,这么说吧,关于递归明白和运用,只要总结出本身的一套明白要领,才真正的控制递归,下面总结一下我本身明白的递归。

1、明白递归能够处理什么题目,也就是上边所讲到的处理的题目应当满足递归的三个前提。细致离开解说:

  • 将题目划分为子题目:假如我们推断该题目能够用递归处理了,比方兼并两个链表中比较结点大小,然后加入到新链表,然后在比较下一个结点大小,这个历程就是一个将题目化为子题目的历程,比较当前结点大小先要比较后一个节点与当前结点的大小,能够明白成“递”的历程。(就比如一扇扇包括关联的大门,问一共有几所大门,你拿着如果去翻开,发明里边另有一扇,然后再翻开,发明另有一扇,直到末了一扇。一般我们运用迭代轮回来处理这个题目,就比如翻开一扇大门就 加一;而递归要做的就是当大门悉数翻开的时刻,从里往外走封闭大门的时刻统计大门的数目)
  • 寻觅停止前提:递归必须有个停止前提,也就是子题目的处理方案,假如没有停止前提,题目就不会获得解答。如上方兼并链表的时刻,经由递归不停的比较下一结点,晓得个中一个链表比较终了为空了,效果返回第二个链表,也就是达到了停止的前提,最先“归”的历程。
  • 递推公式:你会问了,怎样写出递推公式呢?既然停止前提有了,那我们最先找出递归公式,下面是我本身总结出来的履历。

    ① 一看参数和 return。什么意思呢?比方上方兼并链表的代码,离别明白函数的参数和返回值是什么?参数是两个兼并的链表结颔首结点。返回值是兼并后的链表。

    ② 二凑参数和return。就是说我们要去根据参数和返回值去用递归捏造它,比较完成第一个结点,固然传入第二个节点,返回第一个结点到新链表尾部,那末递归就会返回新链表的下一结点。要屏蔽掉递归的细节,只看参数和返回值。

▉ 递归瑕玷

有时刻题目能够运用递归,然则因为递归的瑕玷会摒弃运用。

1、递归小心客栈溢出。

2、小心递归反复元素盘算。

3、递归的高空间复杂度。

▉ 怎样准确写出递归代码?

1、将题目化为子题目。

2、处理子题目。

3、寻觅停止前提。

4、写出递归公式。

5、将递推公式转化为代码。

迎接一同加入到 LeetCode 开源 Github 堆栈,能够向 me 提交您其他言语的代码。在堆栈上对峙和小伙伴们一同打卡,配合完美我们的开源小堆栈!
Github:https://github.com/luxiangqia…

    原文作者:小鹿
    原文地址: https://segmentfault.com/a/1190000018825498
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞