LeetCode-合并两个有序链表

这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战

题目

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

image.png

  • 示例 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 均按 非递减顺序 排列

解题:

先了解什么是升序链表:

链表(Linked list)是一种常见的基础数据结构,是一种线性表

升序链表中,数据是按照关键值有序排列的,并且是从小到大排序

什么是递归算法?

递归算法(recursion algorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。

阅读递归函数最容易的方法不是纠缠于它的执行过程,而是相信递归函数会顺利完成它的任务。而我们写递归函数要考虑的是每个步骤正确无误,限制条件设置正确,并且每次调用之后更接近限制条件,递归函数总是能正确的完成任务。

考虑边界值:

题目要求新链表是通过拼接给定的两个链表的所有节点组成的,那么有以下的情况

  • 其中一个为空链表,那么新链表则等于另一个链表
  • 两个都是空链表,这样拼接组成的新链表也是空链表
  • 两个链表都不为空:
    从两个链表节点的值进行判断,把节点值小的链表指向的下一节点传下去,而另外的链表则把当前节点传下去继续进行节点值的比较,知道递归调用中某一个链表参数为空,则退出递归调用,向上逐层返回链表结果

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
java复制代码class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
// 其中一个为空链表,那么新链表则等于另一个链表
if(list1 == null){
return list2;
} else if(list2 == null){
return list1;
} else if(list1.val < list2.val){
// 递归调用
list1.next = mergeTwoLists(list1.next, list2);
return list1;
} else {
// 递归调用
list2.next = mergeTwoLists(list1, list2.next);
return list2;
}
}
}

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%