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

测试结果

相关推荐
船厂电气自动化ai大模型4 小时前
AI大模型与数学·第57课 傅里叶全套工具链综合实战:串联级数/连续变换/DFT/FFT,图像、音频、扩散模型完整例题
数据结构·人工智能·深度学习·算法·机器学习
wuyk5554 小时前
从零吃透Modbus通信|第3章:STM32 Modbus RTU主机
服务器·开发语言·网络·数据结构·stm32·单片机·嵌入式硬件
Brilliantwxx5 小时前
【算法从零到千】【59-65】链表专题
数据结构·链表
重生之后端学习5 小时前
53. 最大子数组和[中等]✅
java·数据结构·算法·leetcode·职场和发展
evans在进步8 小时前
LeetCode 438 找到字符串中所有字母异位词:滑动窗口与排序解法详解
算法·leetcode·职场和发展
小手cool8 小时前
使用递归对数组进行反转操作
java·数据结构·算法
码行山野赴时序归途8 小时前
从暴力到最优:三道 C 语言入门题的解法思路
c语言·开发语言·数据结构·算法·leetcode·排序算法
土司大王8 小时前
LeetCode hot100——随机链表的复制
算法·leetcode·链表
CarIise10 小时前
C语言结构体与链表
数据结构·算法
Tisfy10 小时前
LeetCode 3720.大于目标字符串的最小字典序排列:状态机 —— :从左往右枚举,失败则退回(最多退回一次)
linux·数据库·leetcode·字符串·状态机·构造