21. 合并两个有序链表

合并升序链表 阅读详情

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

解法1

  1. 就是说有两个有序链表,将两个链表合并起来,合并后的链表依然有序。
  2. 链表可能是空的。

如何解呢?我们可以创建一个空的链表(哑节点,值随便设置),可以将其认为是一根针,这根针穿链表中小的节点,最后就得到结果了。

通过下图逐步分析:

image.png

上图中,蓝绿颜色进行对比,可以知道,绿色是更小的(每次都是用l1 <= l2进行比较),所以哑节点的线穿到了绿色上

上图中绿色节点已经使用过,那么l1的指针向后移动一位,如下图所示:

image.png
此时蓝色比绿色小,所以应该使用蓝色,如下图所示:

image.png
l2指针后移,得到如下图所示:

image.png
此时绿色和蓝色值相等,按照l1 <= l2的条件,应该使用绿色作为下一节点,如下图所示:

image.png
l1指针后移一位,如下图所示:

image.png
此时蓝色值更小,所以使用蓝色,如下图所示:

image.png
l2指针后移以为,如下图所示:

image.png
此时依然是蓝色值更小,所以使用蓝色,如下图所示:

image.png
蓝色l2指针后移一位,如下图所示:

image.png
此时绿色更小,则使用绿色,如下图所示:

image.png
此时绿色=4已经是l1链表的最后一位,所以不需要向后移动,但是l2并未结束,只需要连接到l2=5即可,如下图所示:

image.png
上图中红线部分就是最终结果。

代码如下:

class Solution {
   public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        // 定义哑节点,值等于什么无所谓,因为也不用它
        ListNode dummy = new ListNode(-1);
        ListNode p = dummy;
        while (list1 != null && list2 != null) {
            if (list1.val <= list2.val) {
                p.next = list1;
                list1 = list1.next;
            } else {
                p.next = list2;
                list2 = list2.next;
            }
            p = p.next;
        }
        p.next = list1 == null ? list2 : list1;
        return dummy.next;
    }
}

提交结果:

image.png

C语言面试题-C语言头节点法实现对两个升序链表的合并 本文主要使用C语言实现对两个升序列表的合并,涉及到链表的创建、链表的插入、链表排序、链表的合并等。这是常考的一道面试题,比较经典,既可以考察对于链表的理解也可以考察对于排序算法。这里使用带有头结点的链表来实现。 阅读详情

相关推荐

Leetcode 21合并两个有序链表

咕咕咕,之前忙着看Django,又咕了leetcode好多天,今天开始每天一题leetcode加题解启动(发出了不咕咕咕的叫声 今天的题目是这样的 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 题意清晰,是一道...

ayang818 's blog 473

合并升序链表系列(Java)

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

weixin_59216829的博客 2024

IBTrACS v04r01 数据提取实战:Pandas 筛选 JTWC/CMA/JMA 3机构最佳路径数据

本文详细介绍了如何使用 Pandas 高效提取和处理 IBTrACS v04r01 数据集中的最佳路径数据,特别针对 JTWC、CMA 和 JMA 三家权威机构的数据进行对比分析。通过构建可复用的数据提取函数,解决多机构数据质量差异问题,并提供高级分析与可视化应用示例,助力热带气旋研究。

clijovtbq401783153的博客 515

合并两个升序链表

合并两个升序链表

bdd717的博客 1967

PaddleOCR转ONNX模型实战:5分钟搞定中文OCR推理部署(附完整代码)

本文详细介绍了将PaddleOCR模型转换为ONNX格式并进行高效推理部署的完整实战方案。通过Paddle2ONNX工具实现模型转换,利用ONNX Runtime构建跨平台推理引擎,涵盖环境配置、模型优化、批量处理及多平台部署等关键步骤,显著提升中文OCR在边缘设备上的推理性能。

weixin_29051811的博客 616

ReelShort Android 逆向实战:Frida Hook 定位 sign 与 requestTime 算法

一个动态变化的 sign,如何从海量 so 逻辑中精准定位并完整复现?本文以海外短剧 App ReelShort 为例,实战拆解搜索、列表与详情接口的分析过程:从 Charles 抓包锁定关键参数,到 jadx 定位 native 函数,再借助 Frida Hook 验证加密结果;逐步还原 requestTime 的生成机制及 sign 的 HMAC-SHA256 签名逻辑。全文记录关键思路、踩坑与验证方法,带你建立一套可迁移的 Android 接口逆向分析流程。

weixin_64116813的博客 456

21. 合并两个有序链表 - 力扣(LeetCode)

这个思路的关键在于利用两个指针来同时遍历两个链表,通过比较节点值来决定哪个节点应该被添加到新链表中。同时,通过哑节点来简化链表的头节点操作。来遍历两个链表,并通过比较它们的值来决定哪个节点应该被添加到新链表中。最后,如果其中一个链表还有剩余节点,我们直接将它们连接到新链表的末尾。最后,我们返回哑节点的下一个节点,它实际上是新链表的头节点。新链表是通过拼接给定的两个链表的所有节点组成的。,并将它们合并为一个新的链表,然后打印出合并后的链表的值。在示例代码中,我们创建了两个示例链表。类来表示链表节点,并在。

it爱好者的学习之路 2797

从零开始学DAG:用dagitty软件快速构建因果图的5个步骤

本文为初学者提供了使用dagitty软件快速构建因果图的5个实用步骤。通过一个公共卫生研究实例,详细演示了如何从定义核心变量开始,逐步引入混杂、中介和碰撞变量,最终利用dagitty的自动分析功能识别最小充分调整集,从而科学指导研究设计与统计分析,有效提升因果推断的严谨性。

ii567的博客 799

LeetCode 21. 合并两个有序链表

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

一起加油 5575

QuickFix Java 实战(一)协议解析、环境搭建与首个应用

本文是QuickFix Java实战系列的第一篇,详细介绍了FIX协议的核心原理与QuickFix/J引擎的实战应用。内容涵盖FIX协议的标签化通信机制、QuickFix/J库的两种下载方法、协议定义文件解析,并通过一个完整的模拟订单发送示例,指导读者快速搭建首个FIX应用环境,实现消息生成与会话通信。

dog123的博客 495

STM32驱动AS5600磁性旋转位置传感器模块

文章目录简介引脚定义I2C接口写数据读数据从指定的地址开始读数据驱动程序cubeMX配置驱动程序`bsp_as5600.h``bsp_as5600.c`测试程序参考资料 简介 AS5600 是一款易于编程的磁性旋转位置传感器,具有高分辨率 12 位模拟或 PWM 输出。 这种非接触式系统测量径向磁化轴上磁铁的绝对角度。 该 AS5600 专为非接触式电位计应用而设计,其坚固的设计消除了任何同质外部杂散磁场的影响。 引脚定义 I2C接口 7位设备地址为0x36(二进制表示为0110110) 支持标准模式和

ApexYuan 1万+

【刷题之路】LeetCode 21. 合并两个有序链表

空间复杂度:O(m+n),m和n分别为两个链表的长度,空间复杂度递归调用的层数,最坏情况下,对于两个链表的每个节点我们都要调用一次,因此空间复杂度为O(m+n)。所以我们可以将思路转化为,每次调用只需要选出较小的节点然后让较小的节点连接上后面合并后的链表即可,而后面的链表的合并也是用同样的递归方式来完成。其实从上面的解法中我们也能得到启发想出一个大事化小的解法,因为我们每次的遍历只需要选出一个较小的节点,然后尾插到新链表之中。时间复杂度:O(m+n),其中m和n分别为两个链表的长度。

kk702392702的博客 1140

langchain4j+milvus实战

本文主要研究一下如何使用langchain4j来对接向量数据库milvus。

go4it 1472

LeetCode 图解 | 21.合并两个有序链表

点击上方蓝字设为星标下面开始今天的学习~今天分享的题目来源于 LeetCode 上第 21 号问题:合并两个有序链表。题目描述将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接...

程序员吴师兄的博客 1万+

qcc304x笔记之手机端显示电量(九)

默认的sdk有些安卓手机不支持电量显示,所以需要加电量显示的补丁 流程分析 1. 首先新建一个task,并将task注册给电池模块 appBatteryRegister(batteryRegistrationForm) 实现handler处理函数,当battery模块电池电量更新后,会将电池百分比值发送到本模块,然后我们就可以在handler中将实时电量同步到手机端了。 hfpAtCmdInit atCmdTask.task.handler = appAtCmdHandleM...

在云巅的博客 2199

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

LeetCode 21. 合并两个有序链表 java

LeetCode 21. 合并两个有序链表 java 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 : 输入:1-&gt;2-&gt;4, 1-&gt;3-&gt;4 输出:1-&gt;1-&gt;2-&gt;3-&gt;4-&gt;4 JAVA 代码: class Solution { public ListNode mergeTw...

lele的专栏 520

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

LeetCode21_合并两个有序链表

链表的基本递归和迭代

Haolin_Liu的博客 1086

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

leetcode21. 合并两个有序链表   easy

leetcode21. 合并两个有序链表 easy 题目描述: 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 解题思路: 就是简单的dummy头结点技巧 代码: ...

speargod的博客 202

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

LeetCode-21-合并两个有序链表 题意描述: 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 解题思路: 代码: Python 方法一: # Definition for singly-link...

花花生的博客 286

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

LeetCode:21. 合并两个有序链表(python) 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 LeetCode 链接 思路: 迭代,遍历两个链表,比较两个节点值,指向较小值节点 递归,比较链表...

wk的博客 1070

LeetCode-21.合并两个有序链表

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

crossoverpptx的博客 495

21.合并两个有序链表

LeetCode题解-21.合并两个有序链表(C语言)

小张的博客 292

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

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

2402_83244812的博客 1371

leetcode:21. 合并两个有序链表

题目来源 leetcode 题目描述 题目解析 做链表的必备套路 哑节点 创建哑节点转为结果链表的开头,返回结果是这个节点的下一个位置。目的是:在未遍历之前,我们不知道构建的结果中,开头元素值l1还是l2,为了让代码整齐,创建哑节点 创建move游标 哑节点标记了结果链表的开头,因此是不能移动的。为了把两个链表merge的结果放到结果链表的最后,就需要使用一个move游标指向结果链表的最后一个元素。初始时,move指向哑节点,之和随着结果链表的增加而不停的往后移动,始终保持其指向结果链表的最后一个元素。

OceanStar的博客 429

leetcode刷题记录——21合并两个有序链表

题目: leetcode刷题记录——21合并两个有序链表 代码: /** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } */ /** * @param {ListNode} l1 * @param {...

weixin_41246577的博客 211
上一篇: 「力扣」20. 有效的括号
下一篇: 「力扣」26. 删除有序数组中的重复项
「已注销」
博客等级 码龄3年 128粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值