【算法 -- LeetCode】(021) 合并两个有序链表

news2025/2/4 6:58:34

在这里插入图片描述

1、题目

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

示例 1:
在这里插入图片描述

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例 2:

输入:l1 = [], l2 = []
输出:[]

示例 3:

输入:l1 = [], l2 = [0]
输出:[0]

题目链接:https://leetcode.cn/problems/merge-two-sorted-lists

2、图解

假设我们的链表分别为:

l1 = [1,2,4]

l2 = [1,3,4]

同时我们设定一个 “prehead” 的哨兵节点,大概是下面这样:

在这里插入图片描述
首先我们维护一个 prehead 的哨兵节点。我们其实只需要调整它的 next 指针。**让它总是指向l1或者l2中较小的一个,直到l1或者l2任一指向null。**这样到了最后,如果l1还是l2中任意一方还有余下元素没有用到,那余下的这些元素一定大于prehead已经合并完的链表(因为是有序链表)。我们只需要将这些元素全部追加到prehead合并完的链表后,最终就得到了我们需要的链表。大概流程如下:

  1. 首先我们将 prehead 指向 l1 或者 l2 中比较小的一个。如果相等,则任意一个都可以。此时的 l1 为 [2,4],l2 为 [1,3,4]
    在这里插入图片描述
  2. 我们继续上面的步骤。将 prehead 的链表指向 l1 和 l2 中较小的一个。现在这里就是指向1。
    在这里插入图片描述
  3. 反复上图步骤。
    在这里插入图片描述
  4. 现在 prehead.Next 就是我们需要的链表。

3、Java 示例代码

/**
 * Definition for singly-linked list.
 * 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; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        ListNode dummy = new ListNode(0), 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;
        }

        if (list1 != null) p.next = list1;
        if (list2 != null) p.next = list2;
        return dummy.next;
    }
}

执行结果:
在这里插入图片描述

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

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

相关文章

【并发编程】深入理解并发工具类CountDownLatch

文章目录 前言一、初识 CountDownLatch二、CountDownLatch 的核心方法三、CountDownLatch 的应用场景应用场景一&#xff1a;等待多个线程任务执行完成应用场景二&#xff1a;等待外部资源初始化应用场景三&#xff1a;控制线程执行顺序 四、CountDownLatch 的源码分析核心方法…

mysql表主键自增过大问题

问题及项目环境 问题 最近在做项目时&#xff0c;发现我创建的每一个表的主键设置自增&#xff0c;在插入数据数据时会出现自增值过大的问题。 问题展示: 在后端执行Basemapper中的insert()方法时&#xff0c;数据库中的主键id字段为下: 且我在对应的实体类的设置为下: 我们…

mysql四种隔离级别以及原理

事务4大特性&#xff1a; 原子性&#xff1a; undolog日志来保证&#xff0c; 记录了要回滚的日志信息&#xff0c; 事务回滚时撤销已经执行的sql. 一致性&#xff1a;由其它3大特性来保证。 隔离性: MVCC来保证&#xff0c; 多版本并发控制。 持久性&#xff1a;由redolog来保…

flask路由、模板、请求与响应、闪现以及请求扩展

一、函数加装饰器的执行顺序 flask的路由基于装饰器---->在视图函数上再加装饰器---->加多个装饰器的执行顺序---->登录认证装饰器---->加载router下,先做路由匹配,匹配成功执行被auth包裹的视图函数 二、路由系统 flask的路由是基于装饰器的---->但是它的…

APB/AHB/AXI总线介绍和理解

APB/AHB/AXI总线介绍&#xff1a; APB/AHB/AXI均属于AMBA (Advanced Microcontroller Bus Architecture)&#xff0c;常用于SoC设计中&#xff0c;全称叫作高级微控制器总线架构&#xff0c;它是由ARM公司研发推出的高性能片上总线协议。 AMBA 1.0还包含ASB和APB&#xff08;A…

MP4格式视频怎么转mov格式?好用的视频格式转换方法分享

MOV格式是苹果公司的专有格式&#xff0c;因此在苹果设备上播放MOV格式的视频时&#xff0c;兼容性更好&#xff0c;因此可以实现更高质量的视频。如果我们需要高质量的视频输出&#xff0c;将MP4转换为MOV格式可能是个好选择。那么怎么进行转换呢&#xff1f;给大家分享几种简…

Linux环境下,Nginx+Naocs远程访问碰到的若干问题

一、配置背景 该项目来源于尚硅谷SpringCloud进阶课程&#xff0c;在linux环境下配置一个注册中心组。 二、碰到的问题 问题主要是远程访问Nginx显示无法连接的问题&#xff0c;接下来是排查方案&#xff1a; 1. 防火墙问题 这里需要确保双方电脑能ping通之后确保端口也能…

k210获取机器码

准备工作&#xff1a; kflash_gui&#xff08;下载固件到开发板&#xff09; key_gen_v1.2&#xff08;需要将其下载至开发板&#xff09; 1.kflash_gui 下载地址&#xff1a;Releases sipeed/kflash_gui GitHub 2. key_gen_v1.2下载地址&#xff1a;下载站 - Sipeed 3.…

Java经典面试解析:服务器卡顿、CPU飙升、接口负载剧增

01 线上服务器CPU飙升&#xff0c;如何定位到Java代码 解决这个问题的关键是要找到Java代码的位置。下面分享一下排查思路&#xff0c;以CentOS为例&#xff0c;总结为4步。 第1步&#xff0c;使用top命令找到占用CPU高的进程。 第2步&#xff0c;使用ps –mp命令找到进程下…

Three.js——十三、自定义大小画布、UI交互按钮以及3D场景交互、渲染画布为文件(图片)

画布全屏以及自定义大小画布 <!-- canvas元素默认是行内块元素 --> <divclass"model"style"background-color: #ff0000;"width"300"height"180" ></div>画布随窗口变化 // 画布跟随窗口变化 window.onresize fun…

cmake的一个测试demo

目录 一、ubuntu中安装cmake二、单个源文件main.cCMakeLists.txt的编写 三、多个源文件main.ctest1.ctest1.hCMakeLists.txt的编写 一、ubuntu中安装cmake sudo apt-get install cmake查看cmake的版本号 cmake --version二、单个源文件 main.c #include<stdio.h>int …

【微信小程序-uniapp】CustomButton 自定义常用吸底按钮组件

1. 效果图 2. 组件完整代码 <template><view:class="[custom-btn flex-center, size == big ? big : mid, type == primary ? primary : info, plain ? plain : , disabled ? disabled : , round ? round : ]"

苹果笔买原装的还是随便买?ipad触控笔推荐

当像iPad这样的平板电脑功能变得越来越强&#xff0c;能够承载的功能也会越来越多&#xff0c;并且会越来越多地渗透到我们的日常生活和工作中。随着电子设备的更新和软件的不断完善&#xff0c;电容笔的性能也在不断的提升&#xff0c;因此如何挑选一款相对好用的电容笔&#…

【Kafka】Ubuntu 部署kafka中间件,实现Django生产和消费

原文作者&#xff1a;我辈李想 版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、Kafka安装1.下载并安装Java2.下载和解压 Kafka3.配置 Kafka4.启动 Kafka5.创建主题和生产者/消费者6.发布和订阅消息 二、KafkaDjang…

AIS报文解析

!AIVDM,1,1,A,13u?etPv2;0n:dDPwUM1U1Cb069D,023* 我们知道消息内容就是13u?etPv2;0n:dDPwUM1U1Cb069D&#xff0c;这是一串ASCII码字符串&#xff0c;我们可以获取其对应的ASCII码数值。 但是在AIS的编码表不需要这么多符号&#xff0c;所以截取了其中一部分&#xff0c;如…

良心推荐!5款支持Linux系统的国产软件,兼容国产操作系统

虽然市面上大多数用户使用的是Windows操作系统&#xff0c;但也有不少使用Linux系统的用户&#xff0c;特别是国产操作系统的崛起&#xff0c;让Linux系统阵营的用户越来越多。Linux不像Windows那样&#xff0c;有着完整的生态环境丰富的软件应用&#xff0c;但也逐渐在完善中&…

探秘Session跨页面传递数据的神奇力量

探秘Session跨页面传递数据的神奇力量 前言一、什么是 Session 会话?二、如何创建 Session 和获取(id 号,是否为新)三、Session 域数据的存取四、Session 生命周期控制五、Session的销毁五、浏览器和 Session 之间关联的技术内幕 前言 本博主将用CSDN记录软件开发求学之路上亲…

自定义类型详解(结构体、枚举、联合)

目录 一、结构体 1.1结构体的认识&#xff1a; 1.2结构体的声明 1.先声明结构体类型&#xff0c;再定义该类型的变量 2.在声明类型的同时定义 1.3结构体的特殊声明 1.4结构体的自引用 1.5结构体的初始化和访问 1.6结构体内存对齐 1.7修改默认对齐数 1.8结构体传参 二…

驱动程序和应用程序

驱动程序和应用程序 一、应用程序和驱动程序如何关联起来的 1、文件描述符fp 与 struct file 应用程序&#xff08;APP&#xff09;在打开文件时&#xff0c;可以得到一个整数&#xff0c;这个整数被称为文件句柄。对于 APP 的每一个文件句柄&#xff0c;在内核里面都有一个…

AI辅助瞄准系统开发与实战(三)-竣工

文章目录 前言GUI功能整合提示框功能整合 总体代码自定义线程池YoloDectect工具类窗口绘制鼠标控制控制器GUI界面 总结 前言 okey&#xff0c;大概经过&#xff0c;两天的开发&#xff0c;我在这里完成了基本的全部开发。 那么我们先来看看大概的效果吧&#xff1a; 在这里的…