LeetCode 21. 合并两个有序链表(Python)

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

输入: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 均按 非递减顺序 排列

方法一:
使用哑结点(dummy node)和双指针来遍历两个链表,比较各自的节点值,将较小值的节点连接到新链表上,直至其中一个链表为空,最后将剩余部分直接接到新链表后面。

def mergeTwoLists(l1: ListNode, l2: ListNode) -> ListNode:# 创建一个哑结点,方便返回结果链表dummy = ListNode(0)cur = dummy# 遍历两个链表,直到有一个为空while l1 and l2:if l1.val <= l2.val:cur.next = l1l1 = l1.nextelse:cur.next = l2l2 = l2.nextcur = cur.next# 将剩余部分接上cur.next = l1 if l1 else l2return dummy.next

代码解析
1. 初始化哑结点
创建一个哑结点 dummy 并用 cur 指向该节点,方便在不需要处理头节点特殊情况的同时构造新的链表。
2. 双指针遍历
使用 while l1 and l2 循环遍历两个链表。比较 l1 与 l2 当前节点的值,将较小的节点接到新链表的尾部,并移动对应链表的指针。
3. 接上剩余部分
当其中一个链表遍历完毕后,另一个链表可能还有剩余节点,直接将剩余部分接到新链表末尾即可。
4. 返回结果:
最后返回 dummy.next,即合并后链表的头结点。

这种方法的时间复杂度为 O(n+m),空间复杂度为 O(1)(不考虑输出链表所需空间)。

方法二:
递归方法的核心思想是:比较两个链表的头节点,较小的那个作为合并后链表的头,然后递归合并剩下的部分。

# 定义链表节点类
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:# 如果有一个链表为空,直接返回另一个链表if not l1:return l2if not l2:return l1# 递归调用时通过 self 调用类内的方法if l1.val <= l2.val:l1.next = self.mergeTwoLists(l1.next, l2)return l1else:l2.next = self.mergeTwoLists(l1, l2.next)return l2

代码解析
1. 递归终止条件
如果 l1 为空,则直接返回 l2;如果 l2 为空,则返回 l1。这保证了当其中一个链表遍历完时,递归能正确结束。
2. 递归比较
对于非空的 l1 和 l2,比较它们的值:
• 如果 l1.val 小于等于 l2.val,则将 l1 作为当前节点,并将 l1.next 指向递归合并后的结果。
• 否则,将 l2 作为当前节点,并将 l2.next 指向递归合并后的结果。
3. 返回结果
递归完成后,每一层调用都会返回合并后的链表头,最终返回整个合并后的链表。

这种方法同样能将两个升序链表合并为一个新的升序链表,时间复杂度为 O(n+m),但使用了递归来实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/71338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FPGA 配置原理

用户编程控制的FPGA 是通过加载比特位流配置内部的存储单元实现的。该存储单元就是所谓的配置单元&#xff0c;它必须在器件上电后进行配置&#xff0c;从而设置查找表&#xff08;LUT&#xff09;的属性、连线方式、IOB 电压标准和其它的用户设计。 1.配置帧 以Xilinx 公司的…

测试人员如何更好的跟踪BUG

软件测试中BUG跟踪是确保软件质量的关键环节。测试人员不仅需要发现BUG&#xff0c;还需有效管理其状态&#xff0c;从报告到修复验证的全过程。如何更好地跟踪BUG&#xff0c;成为测试人员提升效率的重要课题。本文将详细探讨测试人员可以采用的策略&#xff0c;包括使用工具、…

lamp平台介绍

一、lamp介绍 网站&#xff1a; 静态 动态 php语言 .php 作用&#xff1a;运行php语言编写动态网站应用 lamp Linux Apache MySQL PHP PHP是作为httpd的一个功能模块存在的 二、部署lamp平台 1、测试httpd是否可正常返回PHP的响应 2、测试PHP代码是否可正常连接数据…

2025年渗透测试面试题总结-字某跳动-渗透测试实习生(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 字某跳动-渗透测试实习生 渗透流程信息收集如何处理子域名爆破中的泛解析问题绕过CDN寻找真实IPPHPINFO页面关注…

Spring Boot 自动装配深度解析与实践指南

目录 引言&#xff1a;自动装配如何重塑Java应用开发&#xff1f; 一、自动装配核心机制 1.1 自动装配三大要素 1.2 自动装配流程 二、自定义自动配置实现 2.1 创建自动配置类 2.2 配置属性绑定 2.3 注册自动配置 三、条件注解深度应用 3.1 常用条件注解对比 3.2 自定…

《算法笔记》9.6小节 数据结构专题(2)并查集 问题 C: How Many Tables

题目描述 Today is Ignatius birthday. He invites a lot of friends. Now its dinner time. Ignatius wants to know how many tables he needs at least. You have to notice that not all the friends know each other, and all the friends do not want to stay with stra…

CPU、SOC、MPU、MCU--详细分析四者的区别

一、CPU 与SOC的区别 1.CPU 对于电脑&#xff0c;我们经常提到&#xff0c;处理器&#xff0c;内存&#xff0c;显卡&#xff0c;硬盘四大部分可以组成一个基本的电脑。其中的处理器——Central Processing Unit&#xff08;中央处理器&#xff09;。CPU是一台计算机的运算核…

Linux常用指令学习笔记

文章目录 前言一、文件和目录操作指令1. 文件操作2. 目录操作 二、文件权限管理三、网络相关指令四、系统管理指令五、文本编辑器基本操作 六、压缩和解压指令七、总结 前言 在当今的IT领域&#xff0c;Linux系统因其开源、稳定、安全等特性&#xff0c;广泛应用于服务器、个人…

android studio通过 jni 调用第三方非标准 so库

调用第三方的so方法&#xff0c;但这个so内的方法不是标准的jni方法。这就需要我们自己写jni然后链接到第三方so库&#xff0c;通过jni调用so库中的方法。 1.简述&#xff1a; 要先有第三方的so库.so文件和编译库对应的.h头文件 我们自己用 c/c 创建一个标准的so 库,比如 my…

Spring(三)容器-注入

一 自动注入Autowire 代码实现&#xff1a; package org.example.spring01.service;import org.springframework.stereotype.Service;Service public class UserService {}package org.example.spring01.controller;import lombok.Data; import lombok.ToString; import org.…

mac上最好的Python开发环境之Anaconda+Pycharm

为了运行修改 label-studio项目源码&#xff0c;又不想在windows上运行&#xff0c;便在mac上开始安装&#xff0c;开始使用poetry安装&#xff0c;各种报错&#xff0c;不是zip包解压不了&#xff0c;就是numpy编译报错&#xff0c;pipy.org访问出错。最后使用anaconda成功启动…

IDEA 接入 Deepseek

在本篇文章中&#xff0c;我们将详细介绍如何在 JetBrains IDEA 中使用 Continue 插件接入 DeepSeek&#xff0c;让你的 AI 编程助手更智能&#xff0c;提高开发效率。 一、前置准备 在开始之前&#xff0c;请确保你已经具备以下条件&#xff1a; 安装了 JetBrains IDEA&…

前缀和矩阵

前缀和矩阵&#xff08;Prefix Sum Matrix&#xff09;是一种预处理技术&#xff0c;用于快速计算二维矩阵中任意子矩阵的元素和。其核心思想是通过提前计算并存储每个位置左上角所有元素的和&#xff0c;将子矩阵和的查询时间从暴力计算的 (O(mn)) 优化到 (O(1))。以下是构建前…

系统架构评估中的重要概念

(1)敏感点(Sensitivity Point) 和权衡点 (Tradeoff Point)。敏感点和权衡点是关键的架构 决策。敏感点是一个或多个构件(和/或构件之间的关系)的特性。研究敏感点可使设计人员 或分析员明确在搞清楚如何实现质量目标时应注意什么。权衡点是影响多个质量属性的特性&#xff0c; …

SSL证书和HTTPS:全面解析它们的功能与重要性

每当我们在互联网上输入个人信息、进行在线交易时&#xff0c;背后是否有一个安全的保障&#xff1f;这时&#xff0c;SSL证书和HTTPS便扮演了至关重要的角色。本文将全面分析SSL证书和HTTPS的含义、功能、重要性以及它们在网络安全中的作用。 一、SSL证书的定义与基本概念 S…

基于微信小程序的停车场管理系统的设计与实现

第1章 绪论 1.1 课题背景 随着移动互联形式的不断发展&#xff0c;各行各业都在摸索移动互联对本行业的改变&#xff0c;不断的尝试开发出适合于本行业或者本公司的APP。但是这样一来用户的手机上就需要安装各种软件&#xff0c;但是APP作为一个只为某个公司服务的一个软件&a…

宝塔找不到php扩展swoole,服务器编译安装

1. 在php7.4中安装swoole&#xff0c;但找不到这个扩展安装 2. 服务器下载源码解压安装 http://pecl.php.net/package/swoole 下载4.8.0版本 解压到/www/server/php/74/下 3. 发现报错问题&#xff1b; 更新一下依赖 yum update yum -y install gcc gcc-c autoconf libjpe…

大数据测试总结

总结测试要点&#xff1a; 参考产品文档&#xff0c;技术文档梳理以下内容 需求来源 业务方应用场景 数据源&#xff0c;数据格转&#xff0c;数据产出&#xff0c;数据呈现方式&#xff08;数据消亡史&#xff09;&#xff0c;数据量级&#xff08;增量&#xff0c;全量&am…

React封装通用Table组件,支持搜索(多条件)、筛选、自动序号、数据量统计等功能。未采用二次封装调整灵活,包含使用文档

封装通用组件 一、封装思想二、react代码三、css代码四、实现效果五、使用文档 BasicTableModal 表格模态框组件1.组件简介2.功能特点3.使用方法基础用法宽度控制示例带筛选功能搜索功能示例自定义单元格渲染 4.API 说明PropsColumn 配置项Filter 配置项 5.注意事项 一、封装思…

React 中 useState 的 基础使用

概念&#xff1a;useState 是一个React Hook&#xff08;函数&#xff09;&#xff0c;它允许我们向组件添加状态变量&#xff0c;从而影响组件的渲染结果。 本质&#xff1a;和普通JS变量不同的是&#xff0c;状态变量一旦发生变化&#xff0c;组件的视图UI也会跟着变化&…