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

LeetCode - #21 合并两个有序链表(Top 100) 前言 本题为 LeetCode 前 100 高频题 我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。微博:@故胤道长)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 LeetCode 算法到目前我们已经更新了 20 期,我们会保持更新时间和进度(周一、周三、周五早上 9:00 发布),每期的内容不多,我们希望大家可以在上班路上阅读,长久积累会有很大提升。 不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢 阅读详情

题目链接:

LeetCode #21 合并两个有序链表

题目描述:

#21. 合并两个有序链表(难度:简单)

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

示例:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

通过次数325,435提交次数512,003

分析:

该题是链表题目中的基础题,太久没接触链表了,还是给自己绕了好久…

  • 定义两个指针 head、pre:初始化二者都指向一个新节点 -1
  • head:用于返回合并后的链表,head.next 指向两个链表中第一个元素较小的节点,不再改变
  • pre: 调整 pre.next 以合并整个链表
  • l1、l2 两个指针用于遍历链表
  • 每次取 l1、l2 中的较小值,作为下一个要连接的节点
  • 先让 pre.next 指向较小值,再把被连接完的节点的 next 作为新的 l1 或 l2,然后更新 pre 为新连接的节点

代码:

无论连接的是哪个链表上的节点,三步操作中都需要更新 pre 指针,故可将该操作提出来作为公共部分。

class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode head = new ListNode(-1);//head 用于指向最终返回的合并后的链表
        ListNode pre = head;//pre 用于保存前一个节点,pre 和 head 最初指向同一个节点
        while(l1 != null && l2 != null){//遍历到其中一个为空即可,因为是有序链表,没遍历完的直接接到后面
            if(l1.val <= l2.val){
                pre.next = l1;
                l1 = l1.next;
            }else{
                pre.next = l2;
                l2 = l2.next;
            }
            pre = pre.next;
        }
        pre.next = l1 == null ? l2 : l1;//哪个还没遍历完,说明剩下的都是大的,直接接到后面
        return head.next;
    }
}

假设两链表长度分别为 m、n,则时间复杂度为 O(m + n)。

后续:

本次用的是迭代的方法,有序链表的合并 除了 迭代法,还可以用 递归法,过段时间等把这个题忘了再更新递归法。

LeetCode 每日一题 #21:合并两个有序链表|Python 递归与迭代双解法 用于追加新结点。 阅读详情

相关推荐

MDT部署实战:除了Office,这些“装机必备”软件也能一键静默安装(含静默参数)

本文详细介绍了如何利用Microsoft Deployment Toolkit(MDT)实现企业级软件的静默安装,包括浏览器、开发工具和系统增强工具等“装机必备”软件的部署方案。通过命令行参数和MSI属性,IT运维团队可以高效构建标准化工作环境,提升部署效率并确保版本一致性。文章还提供了安装顺序控制、结果验证和常见问题排错等高级技巧。

weixin_26985923的博客 172

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

题目描述 21.合并两个有序链表 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 题目解析 方法一:递归 解题思路 我们直接采用递归的方法,首先判断其中一个链表是否为空,若为空则无需进行递归比较直接返回结果。否...

握不住手中沙 253

手把手教你用ObjectCRX进行Caxa二次开发:从零开始的环境搭建教程

本文是一份面向零基础初学者的Caxa二次开发实战指南,重点讲解如何使用ObjectCRX框架从零开始搭建开发环境。内容涵盖Visual Studio 2015版本锁定、ObjectCRX向导集成、项目创建、典型错误解决,并最终实现一个可在Caxa中运行的HelloWorld程序,帮助开发者快速入门并避开常见陷阱。

w3x4y的博客 513

【链表】两个无序链表合并成递增有序链表(利用原表空间)

思路:  1、排序        先将两个链表从小到大排序,调整成两个有序链表。 2、合并       使用两个工作指针PA和PB分别从两个表头开始循环。       当两个工作指针均非空时,如果PA-&gt;data大于PB-&gt;data,将PB插入到新链表中,PB指针向后移动;如果PA-&gt;data小于PB-&gt;data,将PA插入到新链表中,PA指针向后移动;如果PA-...

hr786250678的博客 3719

串级PID 位置环+速度环

串级PID 位置环+速度环

weixin_62775618的博客 9109

保姆级教程:手把手教你为裕泰微YT8521 PHY芯片编写Linux设备树(DTS)节点与驱动

本文提供了一份详细的保姆级教程,手把手教你为裕泰微YT8521 PHY芯片编写Linux设备树(DTS)节点与驱动。从基础配置到RGMII接口的特殊设置,再到驱动开发的关键步骤和调试技巧,帮助开发者快速掌握PHY芯片的移植与开发。

weixin_33734785的博客 333

leetcode -- 合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 这个是一个典型的链表问题,链表的问题相对来说还是比较简单的,但是确实很让人头疼,尤其是像C++这类语言,经常需要自己手动释放内存。而且经常就会出现野指针问题。。。遇到就很难受。 在讲解这道题前我们先简单的介绍以下链表。顾名思义链表就是一种链式结构。在每个结点中储存着

强者之路 213

DOA估计算法从原理到仿真——CBF、Capon、MUSIC算法

从原理出发理解并实现经典的DOA估计算法

m0_55845774的博客 1万+

力扣LeetCode #21 合并两个有序链表(MergeTwoLists)

- 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 public class ListNode { int val; ListNode next; ListNode() {} ListNode(int val) { this.val = val; } ListNode(int val, ListNode next) { this.val = val; this.next = next; } } 来源:LeetCode - 示例 输入:1->2

weixin_49155948的博客 279

堆一呼一吸之间:动态扩缩容引发JVM堆内存震荡的伸缩算法、代际传导与容器定容解析

Kubernetes扩容后,新Java实例的GC频率常比老实例高出数倍,堆容量反复伸缩。本文从一次支付系统的GC陡增出发,结合HotSpot源码与JDK 8实测,拆解堆伸缩的记账规则:期望容量以GC后已用量为基数、以Xms为下限,按空闲比例判断扩缩,收缩只在老年代回收后按0%、10%、40%、100%步进;再剖析年轻代随老年代联动、晋升风暴与元空间触发线,对比Parallel、G1、ZGC等收集器及JDK 26的变化,讨论容器分账、HPA共振与原地扩缩容,最后给出分级定容、预热与监控的方案。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 15万+

YOLOv8改进有效系列目录 | 包含卷积、主干、检测头、注意力机制、Neck上百种创新机制

Hello,各位读者们好,本专栏自开设两个月以来已经更新改进教程120+余篇其中包含C2f、主干、检测头、注意力机制、Neck多种结构上创新,也有损失函数和一些细节点上的创新,订阅本专栏以后你不仅可以收获跟专栏的阅读权限,同时可以进Qq群,里面包含集成我所有创新的YOLO最新目录,和我本人录制的视频讲解教程,如果你想要在YOLOv8系列收获一篇论文,我相信订阅本专栏后你一定会有所收获~YOLOv8改进有效系列目录。

Snu77的博客 18万+

leetcode 题号#21 合并两个有序链表

查看题目详情可点击此处。 题目 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 解题思路 首先两个链表都是有序的,那就是需要解决一条链的某几个连续结点需要插入另一条链的两个结点之间的情况,我将两条链分为主链和...

Cloneable的博客 183

点云从入门到精通技术详解100篇-点云的特征检测(续)

对每个维度的序列分别计算 DTW 距离,最后。权重将距离限制在较小的范围内,对于时间跨度大的数据集,过度限制了点对点的路径,同的,因此不能用欧氏距离来计算两个多元时间序列之间的距离,本文选用的是动态时。到的股票数据是未知分类的,因此该数据的相似性分析缺少有效的评价方式,通常需要。时间序列,简而言之,就是与时间相关的数据的集合,应用在生活工作中的方方面。时间序列的分段线性化表示的难点在于如何找出分段点,目前,对于分段点的研究。经过分段线性化之后,每个多元时间序列的维度是相同的,但是每一维的长度是不。

getusushu的博客 334

LeetCode #21 合并两个有序链表

LeetCode #21 合并两个有序链表 题目描述 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 解法 注意链表的结构特点!!!! /** * Definition for singly-linked l...

Jason7even的博客 321

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

LeetCode链表#21合并两个有序链表

题目 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/merge-two-sorted-lists 著作权归...

weixin_44778719的博客 177

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

力扣 # 21. 合并两个有序链表 JAVA实现

力扣 # 21. 合并两个有序链表 JAVA实现

weixin_54525144的博客 490

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【LEETCODE】#21 合并两个有序链表

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 C++: 第一遍将【相等】的这个else分支写错了,主要错误在于,next指针指向下一个的这条语句写到了后面,导致节点自己指向自己,造成了超时错...

夏至是个程序媛 311

LeetCode #21. 合并两个有序链表 递归

https://leetcode-cn.com/problems/merge-two-sorted-lists/description/合并两条有序链表,形成一条新的有序链表:用递归实现1.如果其中一条链表为空,那么只需要接上(返回)另一条链表即可2.两条链表都不为空的话就比较两条链当前位置的值大小。左链小,就用小值创建一个新结点到合并链上,合并链的下一个结点则递归调用函数合并除掉已添加的点后的两...

三生锁链 414

leetcode #21合并两个有序链表

示例: 思路:创建一个头节点head和一个指向该节点的标记节点pre,遍历链表,比较两个节点val的大小,标记节点指向val小的节点,直到一个链表遍历完。最后如果链表1不为空,则pre指向l1;反之亦然。 代码如下: class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { Lis...

月月鸟的博客 158

【LeetCode】#21合并两个有序链表(Merge Two Sorted Lists)

【LeetCode】#21合并两个有序链表(Merge Two Sorted Lists)、 题目描述 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 输入:1-&gt;2-&gt;4, 1-&gt;3-&gt;4 输出:1-&gt;1-&gt;2-&gt;3-&gt;4-&gt;4 Description Merge two sorted li...

weixin_43858604的博客 111

#力扣:21. 合并两个有序链表@FDDLC

四、JavaScript。

LiuXingchang的博客 446

LeetCode #21 合并两个有序链表(两种解法)

将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 解题思路1: 暴力法,设一个pre指针,然后设两个指针,分别遍历比较两个链表当前值的大小,将较小值加入pre后,移动pre指针,直到两个链表其中一个遍历完毕,再将剩下的那个加入到排序列表的后面。 class Solution { public List

婷子的博客 471

Leetcode #21 Merge Two Sorted Lists 合并有序链表 解题报告

0 题外话嗯,从这次开始我就把题目换一下,改成解题报告了,因为我小节小结总是不分,等有时间也去改下之前的解题报告咯~~我算了下自己的速度,作为一个本学期的额外爱好,到现在21天刷了100题,速度也还算好,毕竟像今天这样基本一题没法刷的时间占到一周的一半多的时间。1 解题思想题目是给两个单链表,里面的数值都是有序的,现在要求他们合并成一个有序链表。这道题的做法就是,从两个单链表的头结点开始分别设立两个

MebiuW的专栏 2168

力扣-->#21. 合并两个有序链表 -->链表-简单(递归、迭代)

https://leetcode-cn.com/problems/add-two-numbers 题目描述: 给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0开头。 ...

weixin_46486508的博客 425

LeetCode(python3) #21 合并两个有序链表

#21 合并两个有序链表解法一.解题思路二.代码展示三.总结其他 一.解题思路 说明:这题一开始是因为忘记了链表这个数据结构所以直接懵逼了,后面去补了一下链表结构后,就比较清楚了大概操作,但是还不够,于是又去参考了一下官方文档说明,发现只需要创建一个头节点就能解决丢失问题(一开始自己想偏了,忽视了能创建节点这个点) 思路:创建一个头节点,和一个游标。通过一次遍历(l1和l2都不为None),判断节点大小,用游标节点来链接较小的节点,最后将不为None的链表挂载到游标节点最后即可。 注意:需要l1和l2的节点

Scdh2020的博客 160
上一篇: 【贪心算法】LeetCode #134 加油站
下一篇: 【链表】LeetCode #83 删除排序链表中的重复元素 (两种方法)
Code_Yilia
博客等级 码龄11年 4粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值