Leetcode算法递归类—合并两个有序链表

目录

21. 合并两个有序链表

题解:

代码:


将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

示例 1:

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例 2:

输入:l1 = [], l2 = []
输出:[]

示例 3:

输入:l1 = [], l2 = [0]
输出:[0]

提示:

  • 两个链表的节点数目范围是 [0, 50]
  • -100 <= Node.val <= 100
  • l1 和 l2 均按 非递减顺序 排列

题解:

首先我们要知道:函数在运行时调用自己,这个函数就叫递归函数,调用的过程叫做递归

  • 递归函数必须要有终止条件,否则会出错;
  • 递归函数先不断调用自身,直到遇到终止条件后进行回溯,最终返回答案。

根据规律本题目:

  • 终止条件:当两个链表都为空时,表示我们对链表已合并完成。
  • 递归:判断 l1 和 l2 头结点哪个更小,然后较小结点的 next 指针指向其余结点的合并结果(调用递归)

代码:

class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if(l1==null) return l2;
        if(l2==null) return l1;
        if(l1.val<l2.val){
            l1.next=mergeTwoLists(l1.next,l2);
            return l1;
        }else{
            l2.next=mergeTwoLists(l1,l2.next);
            return l2;
        }
    }
}

关于return L1: 我们要知道递归的核心是只关注这一层要干什么,返回什么,至于我的下一层不需要管

递归过程理解:

  1. 如果L1空或L2空,我直接返回L1或L2就行
  2. 如果L1第一个元素小于L2的,就把L1的这个元素放到最前面,至于后面不用管, 我只要接收下一级递归处理后给的结果(令L1->next =下一级结果)就行

猜你喜欢

转载自blog.csdn.net/qq_62799214/article/details/132205470
今日推荐