合并两个有序链表(leetcode)

题目

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

示例

cpp 复制代码
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

思路

每次递归都会比较当前两个节点的值,选择较小的节点作为合并后的链表的下一个节点,并继续递归合并剩余部分。(等于情况谁都可以,这里判给(list2))

这个过程会持续进行,直到有一个链表为空,然后将另一个链表直接连接到合并后的链表的末尾。因为是非递减的链表所以可以这样直接合并。

测试代码

复制代码
class Solution{
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        if (list1==null)return list2;
        if (list2==null)return list1;
        if (list1.val<list2.val){
            list1.next=mergeTwoLists(list1.next, list2);
            return list1;
        }else {
            list2.next=mergeTwoLists(list1, list2.next);
            return list2;
        }
    }
}

复杂度

时间复杂度 :

最坏情况下,每次递归都会处理一个节点,并且每个节点都需要比较和连接操作。

假设 n 是 list1 的长度,m 是 list2 的长度。

所以总体时间复杂度为 O(n + m)。
空间复杂度 :

在最坏情况下,递归深度达到 n + m。

因此,空间复杂度为 O(n + m),线性级别。

测试结果

相关推荐
java_nnnn13 小时前
LeetCode刷题滑动窗口(串联所有单词的子串+最小覆盖的子串)Java
算法·leetcode·职场和发展
Navigator_Z14 小时前
LeetCode //C - 1301. Number of Paths with Max Score
c语言·算法·leetcode
Nuanyt16 小时前
LeetCode Hot100 刷题笔记 · 普通数组专题
java·笔记·算法·leetcode
xxxiugou12317 小时前
链表算法题精讲:从两数相加到K组翻转
数据结构·c++·算法·链表
春弦_18 小时前
LeetCode Hot 100 刷题笔记
笔记·leetcode·哈希算法
凯瑟琳.奥古斯特20 小时前
力扣1015C++解法技巧
c++·算法·leetcode·链表·职场和发展
悠仁さん21 小时前
【算法C++】双指针(一)
数据结构·c++·算法
文丑颜不良啊21 小时前
LeetCode626~650题目解析
java·leetcode
YukiRinLL21 小时前
字符串存储与 BF、KMP 匹配算法
数据结构·算法
文丑颜不良啊1 天前
LeetCode601~625题目解析
java·leetcode