21. 合并两个有序链表

21. 合并两个有序链表

  • 题目-简单难度
  • 示例
  • [1. 链表与列表转换求解](#1. 链表与列表转换求解)
  • [2. 链表依次添加最小项](#2. 链表依次添加最小项)

题目-简单难度

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

示例

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/summary-ranges
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

1. 链表与列表转换求解

时间

24ms

击败 59.69%使用 Python 的用户

内存

12.96mb

击败 8.10%使用 Python 的用户

python 复制代码
# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution(object):
    def mergeTwoLists(self, list1, list2):
        """
        :type list1: Optional[ListNode]
        :type list2: Optional[ListNode]
        :rtype: Optional[ListNode]
        """
        # 新建列表li1
        li1 = []
        # 把list1链表中的值转换到li1列表中
        while list1:
            li1.append(list1.val)
            list1 = list1.next
        # 同上
        li2 = []
        while list2:
            li2.append(list2.val)
            list2 = list2.next
        # 拼接列表并排序
        li = sorted(li1+li2)
        # 新建链表
        cur = head = ListNode()
        # 判断li是否为空,为空则返回空链表
        if not li:
            return head.next
        # 遍历li列表,将值添加到新链表中
        for i in range(len(li)):
            # cur链表节点的值等于li列表的当前索引值
            cur.val = li[i]
            # 判断索引是不是最后一项
            if i != len(li) - 1:
                # 将cur指向下一项新建链表节点
                cur.next = ListNode()
                # cur移动到下一项
                cur = cur.next
        # 返回新链表
        return head

2. 链表依次添加最小项

时间

20ms

击败 83.66%使用 Python 的用户

内存

12.72mb

击败 73.38%使用 Python 的用户

python 复制代码
# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution(object):
    def mergeTwoLists(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        # 判断l1链表为空,直接返回l2
        if l1 == None:
            return l2
        # 判断l2链表为空,直接返回l1
        if l2 == None:
            return l1
        # 新建链表
        dummy = ListNode(0)
        cur = dummy
        # 如果两链表都不为空
        while l1 and l2:
            # 添加较小的值到新建链表
            if l1.val <= l2.val:
                cur.next = l1
                l1 = l1.next
            else:
                cur.next = l2
                l2 = l2.next
            # 链表节点移至下一位
            cur = cur.next
        # 如果l1为空,将剩余的l2内容添加到链表,反之添加l1剩余部分
        while l1:
            cur.next = l1
            cur = cur.next
            l1 = l1.next
        while l2:
            cur.next = l2
            cur = cur.next
            l2 = l2.next
        return dummy.next
相关推荐
h_a_o777oah9 分钟前
【树论】树链剖分:将树形结构转化为线性结构以处理树上路径问题(洛谷 P3384 附C++代码模板)
数据结构·算法·线段树·acm·树链剖分·树论·重链剖分
HEJOO912 分钟前
指针的算术运算详解
java·数据结构·算法
Coder-magician16 分钟前
《代码随想录》刷题打卡day47:并查集-part01
数据结构·算法·图论
零基础12317 分钟前
DeepSeek V4.1 Flash (Batch) 的性能测试与应用
经验分享·python·语言模型·vllm
Yyyyyy~20 分钟前
【Anaconda】安装
人工智能·python
LOVE️YOU22 分钟前
Python 函数名、函数对象与“把函数作为参数传递”
开发语言·python
垆边人似月.29 分钟前
VLAN 资源池(100~200 分档)
数据结构·算法
2601_9578838435 分钟前
2026年9月:雷神笔记本售后相关资讯
python·电脑
天赐范式1 小时前
天赐范式第185天:让漂变开始定量——扫N看选择主导边界
python·信噪比·数字生命·天赐范式·动态运行时·种群大小·遗传漂变
潼心1412o1 小时前
C++初阶(长期更新)第6讲:类和对象(下)
开发语言·c++·算法