合并两个有序链表(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),线性级别。

测试结果

相关推荐
小许学java4 小时前
数据结构-ArrayList与顺序表
java·数据结构·顺序表·arraylist·线性表
程序员莫小特7 小时前
老题新解|大整数加法
数据结构·c++·算法
小刘max8 小时前
深入理解队列(Queue):从原理到实践的完整指南
数据结构
zycoder.8 小时前
力扣面试经典150题day1第一题(lc88),第二题(lc27)
算法·leetcode·面试
Dream it possible!9 小时前
LeetCode 面试经典 150_哈希表_存在重复元素 II(46_219_C++_简单)
leetcode·面试·散列表
蒙奇D索大9 小时前
【数据结构】考研数据结构核心考点:二叉排序树(BST)全方位详解与代码实现
数据结构·笔记·学习·考研·算法·改行学it
洲覆9 小时前
C++ 模板、泛型与 auto 关键字
开发语言·数据结构·c++
MoRanzhi12039 小时前
15. Pandas 综合实战案例(零售数据分析)
数据结构·python·数据挖掘·数据分析·pandas·matplotlib·零售
学学学无无止境9 小时前
组合两个表-力扣
leetcode
天选之女wow11 小时前
【代码随想录算法训练营——Day32】动态规划——509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯
算法·leetcode·动态规划