• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
华东 博客
17年国科大博士毕业,曾就职于三星电子,清华博后,目前在某大模型创业公司工作,研究方向大模型、智能体 新浪博客: http://blog.sina.com.cn/u/2463286753
博客园    首页    新随笔    联系   管理    订阅  订阅
LeetCode Top100: 合并两个有序链表 (python)

 

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

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

 

以下是Python程序实现:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next

class Solution:
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        # 创建一个哨兵节点
        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
        
        # 如果有一个链表遍历完了,将另一个链表剩余的节点直接接到新链表后面
        if l1:
            cur.next = l1
        else:
            cur.next = l2
        
        # 返回哨兵节点的下一个节点,即新链表的头节点
        return dummy.next

解释:

  • 首先创建一个哨兵节点,哨兵节点的值可以任意设置,因为最终返回的是哨兵节点的下一个节点,所以哨兵节点可以用来简化代码逻辑。
  • 创建一个指针 cur,指向哨兵节点。然后遍历两个链表,比较链表的头节点大小,将小的节点添加到新链表的末尾,并将指针 cur 移动到下一个节点。直到其中一个链表为空。
  • 如果有一个链表遍历完了,将另一个链表剩余的节点直接接到新链表后面。
  • 最后返回哨兵节点的下一个节点,即新链表的头节点。

  

 

posted on 2023-04-16 22:51  华东博客  阅读(93)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3