【递归-简单】21. 合并两个有序链表(递归+迭代两种解法)

链表高频算法题精讲:环形检测与合并有序链表 给定一个链表,判断链表中是否有环。如果链表中有某个节点可以通过连续跟踪 next 指针再次到达,则链表中存在环。输入:head = [3,2,0,-4](尾节点指向索引1)输出:true。 阅读详情

【题目】
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
【示例 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】
在这里插入图片描述

class Solution:
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        rs=None
        num=[]
        while l1 and l2:
            if l1.val<l2.val:
                num.append(l1.val)  
                l1=l1.next
            else:
                num.append(l2.val)  
                l2=l2.next
        while l1:
            num.append(l1.val)
            l1=l1.next
        while l2:
            num.append(l2.val)  
            l2=l2.next
        num=num[::-1]
        for x in num:
            temp=ListNode(x)
            temp.next=rs
            rs=temp
        return rs

【Method2:】
在这里插入图片描述

class Solution:
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        rs=ListNode(-1)
        rear=rs
        while l1 and l2:
            if l1.val<l2.val:
                rear.next=l1
                l1=l1.next
            else:
                rear.next=l2
                l2=l2.next
            rear=rear.next
        rear.next=l1 if l1 else l2
        return rs.next

【Method3:递归】
在这里插入图片描述

class Solution:
    def mergeTwoLists(self, l1, l2):
        if l1 is None:
            return l2
        elif l2 is None:
            return l1
        elif l1.val < l2.val:
            l1.next = self.mergeTwoLists(l1.next, l2)
            return l1
        else:
            l2.next = self.mergeTwoLists(l1, l2.next)
            return l2
LeetCode 每日一题 #21:合并两个有序链表|Python 递归与迭代双解法 用于追加新结点。 阅读详情

相关推荐

关于Selenium3在MicrosoftEdge浏览器中出现的问题

前言 最近在做web自动化测试,所用环境是java+selenium3.141.59+MicrosoftEdge(Chromium)浏览器。 在调试的过程中,出现了很多问题。比如selenium3在Edge浏览器中远程调用中,不支持addArguments方法等 问题 1.Edge浏览器弹窗问题 在测试过程中,会出现弹出窗提示 ...

zhucheng1994的博客 2205

合并两个有序链表(递归和迭代)

彻底弄懂 链表的合并算法,递归和代码

xinkuaile的专栏 1752

Ubuntu22.04下ROS2与PX4仿真环境搭建全流程解析

本文详细解析了在Ubuntu22.04系统下搭建ROS2与PX4仿真环境的全流程,包括系统准备、ROS2 Humble安装、PX4飞控环境部署、ROS2与PX4通信桥梁搭建等关键步骤。针对常见问题提供了解决方案,并分享了性能优化和开发调试技巧,帮助开发者快速构建无人机仿真开发环境。

weixin_29248653的博客 608

【LeetCode】21合并两个有序链表,迭代和递归

题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 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 均按 非递减顺序 排列 来源:力扣(L

记录、总结 735

英特尔® NUC迷你电脑实现无人值守自动开机配置指南

本文详细介绍了如何配置英特尔® NUC迷你电脑实现无人值守自动开机功能。从BIOS设置到操作系统级配置,涵盖硬件兼容性确认、电源恢复功能设置及常见问题解决,帮助用户轻松实现设备断电后自动恢复运行,适用于家庭服务器、企业终端等多种场景。

weixin_42638178的博客 477

西工大noj100题python2024第三季21-30

【代码】西工大noj100题python2024第三季21-30。

weixin_70523540的博客 1580

合并两个有序链表(迭代和递归)

合并两个有序链表(迭代和递归)

m0_57248981的博客 979

地平线旭日X3开发板--使用Opencv显示CSI摄像头例程

但是从libsrcampy获取的摄像头图像格式是NV12,无法直接在opencv上显示或者处理,调试过程发现旭日派无法直接用opencv的VideoCapture()调用CSI摄像头,需要使用opencv来做开发的小伙伴可以做个参考,效果如下图所示。需要使用libsrcampy库来获取CSI摄像头图像,为了能够使用opencv的API来处理图像,需要增加NV12转化成bgr像素格式的函数。opencv显示图像.png。

bingdund的博客 542

leetcode 4

将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4] 示例 2: 输入:l1 = [], l2 = [] 输出:[] 法 1 正常遍历 连接表 struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){ if(l1==NULL)/...

m0_49509491的博客 524

Roboguide与TIA V16通讯

Roboguide与TIA V16通讯

haier123888的博客 2676

第58篇:AI技术实战:基于深度学习的智能音频内容审核系统

深度学习技术为智能音频内容审核系统提供了强大的支持,通过CNN、RNN和Transformer等模型,能够实现高效的音频内容检测和过滤。使用TensorFlow和Keras可以快速构建和训练音频审核模型,而预训练模型则可以进一步提升性能。数据预处理、特征提取和性能优化是提升智能音频审核系统性能的关键。希望本文的代码示例和注意事项能帮助你更好地理解和应用这些技术。接下来,我们将继续探索更多AI技术实战案例。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 711

「递归算法」:合并两个有序链表

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

C_Small_Cai的博客 930

YOLOv11缝合改进Conv | SAConv在YOLOv11中的应用可切换空洞卷积与性能提升(附代码)

在本篇文章中,我们将深入探讨如何通过引入**SAConv**(Switchable Atrous Convolution,可切换空洞卷积)来优化YOLOv11网络结构,特别是在卷积操作方面的创新。我们会解析SAConv的核心原理和架构设计。

一键难忘的博客 956

力扣HOT100之链表:21. 合并两个有序链表

这道题我用比较简单的思路来做的,直接定义一个新的链表,然后不断遍历两个链表,将较小的值填到链表中,被填入到新的链表后,对应的指针后移一位。当一条链表遍历结束而另一条链表没有遍历结束时,直接将新链表的后继节点指向没有遍历结束的节点。AC完了以后看了下灵神的题解,他写了两种解法,一种是迭代法(就是我的思路),另一种是递归法,递归的代码还挺简洁的,下面说一下递归的主要思想。递归法就是不断遍历两个链表,存储值较小的节点作为头节点返回,而头节点的后继节点则由。

weixin_52151595的博客 325

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

LeetCode 21. 合并两个有序链表

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

一起加油 5575

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

数据结构与算法 - 链表合并:两个有序链表合并的递归与迭代实现

摘要:链表合并的两种高效实现方式 本文详细讲解了合并两个有序链表的两种经典解法:迭代法和递归法。通过双指针策略,迭代法以O(1)的空间复杂度实现线性时间合并;递归法则以更简洁的代码展现分治思想。文章包含完整的Java实现、执行过程图解、复杂度分析,并比较了两种方法的适用场景。该问题不仅是算法面试的常见考点,也是理解指针操作和递归思维的绝佳范例,在归并排序等实际应用中具有重要意义。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

LeetCode 21. 合并两个有序链表:两种经典解法详解

本文解析了LeetCode第21题"合并两个有序链表"的两种解法。递归解法通过分解问题,将大问题转化为小问题,代码简洁但空间复杂度较高;迭代解法使用虚拟头节点和指针遍历,空间效率更优。两种方法的时间复杂度均为O(m+n),但递归占用栈空间,迭代仅需常数空间。文章建议面试优先使用迭代解法,日常练习应掌握两种方法,并提供了调试技巧。这道题是链表操作的基础,涵盖指针移动、递归/迭代等核心概念,适合不同阶段的开发者练习。

2401_86788218的博客 787

[从零开始面试算法] (09/100) LeetCode 21. 合并两个有序链表:迭代与递归的优雅

本文介绍了合并两个有序链表的两种经典方法。迭代法通过虚拟头节点(dummy node)简化边界处理,使用指针遍历比较并链接节点,空间效率高(O(1))。递归法则以更简洁的代码实现,通过比较头节点并递归处理剩余部分,但需要额外栈空间(O(m+n))。两种方法时间复杂度均为O(m+n),迭代法适合处理长链表,递归法则更体现分治思想。理解这两种方法能帮助开发者根据场景选择合适解法,并深入掌握链表操作技巧。

2201_75993451的博客 1497

LeetCode21_合并两个有序链表

链表的基本递归和迭代

Haolin_Liu的博客 1086

【LeetCode】21. 合并两个有序链表

摘要:本文介绍了合并两个有序链表的三种解法。推荐使用迭代-哨兵节点法(时间复杂度O(m+n),空间O(1)),通过比较节点值逐步连接较小节点。递归法代码简洁但空间复杂度较高(O(m+n))。文中提供了完整Go代码实现、测试用例及流程图解,演示了如何正确处理边界条件(空链表、负数、重复值等)并保持结果升序性。三种解法均通过测试验证,其中迭代法最优,适合实际应用。

qq_32019341的博客 1340

【leetcode】21.合并两个有序链表

本文介绍了合并两个有序链表的三种解法。第一种是直接比较法,通过创建新链表逐步比较两个链表节点值;第二种是迭代法,利用哨兵节点和指针重新连接链表;第三种是递归法,通过递归定义实现合并。文章详细分析了每种方法的实现思路和代码,并指出了常见错误。三种方法时间复杂度均为O(m+n),空间复杂度分别为O(m+n)、O(1)和O(m+n)(递归栈空间)。递归法最简洁但可能栈溢出,迭代法最优。

2402_83244812的博客 1371

【LeetCode 热题 100】21. 合并两个有序链表——(解法二)递归法

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

最短的捷径就是绕远路,绕远路才是我的最短捷径。 1016

LeetCode第21题_合并两个有序链表

这是一道经典的链表操作题目:考察基本的链表操作考察代码的简洁性考察边界情况的处理两种解法比较:迭代:空间复杂度更低,代码直观递归:代码更简洁,但空间复杂度较高优化思路:使用虚拟头节点简化操作使用空合并运算符简化代码注意处理边界情况。

qq_40263592的博客 958

图解LeetCode21:合并两个有序链表(递归法)

LeetCode21:合并两个有序链表 一、解题思路 该题能有两种解题思路 1、思路1 可以模拟两个数组的合并,就是归并排序,比较第一个的大小,将小的放到结果链表中,然后接着比较,直到两个链表全部比较结束 如果有一个链表为空,就直接把另一个链表的剩余元素全部加到结果链表中即可,然后退出循环,具体步骤如图所示 2、思路2 第二种解法其实主要的实现方式和上述的也一样,只不过是实现的方式不一致,第一种方法需要新开辟一个空间,用于存放结果。 其实在每步骤的操作都是一样的,将首位相比较,小的链接到下一个元素上,所

weixin_46429290的博客 2370

【LeetCode-21】合并两个有序链表

【LeetCode-21】合并两个有序链表,本文旨在解决“合并两个升序链表”的问题。我们将从以下几个方面展开:解题思路:分析问题的核心逻辑,选择最优解法。代码实现:使用Java语言编写完整的解决方案,并对每一行代码进行详细注释。案例执行过程:通过具体输入输出案例,逐步演示代码执行过程。图示说明:用直观的图示展示链表合并的过程。优化与总结:总结算法的时间复杂度和空间复杂度,并提出可能的优化方向。

qq_44530108的博客 1166

LeetCode:21 合并两个有序链表 递归解法

LeetCode:21 合并两个有序链表 递归解法 很容易想到【归并排序】 归并排序也是合并两个有序的序列,不过一般是用迭代法,这里合并链表,使用递归: 一趟递归分析 假设有有序序列[1, 2, 3]和[2, 3, 4, 5],归并的开始,指针指向两个链表的头,即1, 2 比较指针位置的元素大小,显然1<2,1排在2前面 问题转换为:合并有序序列[2, 3]和[2, 3, 4, 5] 令1...

AKGWSB 's blog 489
上一篇: 【Python】汉字十六进制乱码问题的解决(Python2.7、3.7)
下一篇: 344. 反转字符串
菜菜2022
博客等级 码龄9年 67粉丝 1033原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值