【LeetCode】剑指 Offer 25. 合并两个排序的链表 p145 -- Java Version
题目链接:https://leetcode.cn/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof/
1. 题目介绍(25. 合并两个排序的链表)
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
【测试用例】:
示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
【条件约束】:
限制:
- 0 <= 链表长度 <= 1000
【相关题目】:
注意: 本题与主站 21. 合并两个有序链表 题目相同。
2. 题解
2.1 递归(原书题解)-- O(n+m)
时间复杂度O(n+m),空间复杂度O(n+m)
就代码简单度来说,还是递归要比循环简单一些,但也要付出一些空间代价。
思想:
递归解法的思想还是十分简单的,首先主要就是对空链表的判断:
- 当链表1为空时,那么合并链表为链表2
- 当链表2为空时,那么合并链表为链表1
- 当链表1和2都为空时,那么合并链表也为空
判空完毕后,开始比较头节点:
- 当链表1头节点小于链表2头节点时,合并头节点为l1,递归寻找下一节点
- 当链表1头节点大于链表2头节点时,合并头节点为l2,递归寻找下一节点
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/
class Solution {public ListNode mergeTwoLists(ListNode l1, ListNode l2) {// 判空if (l1 == null) return l2;else if (l2 == null) return l1;// 定义合并链表头节点ListNode mergeHead = null;// 合并过程// 1. 头节点比较,小的为当前节点// 2. 下一节点进入递归if (l1.val < l2.val){mergeHead = l1;mergeHead.next = mergeTwoLists(l1.next,l2);}else { mergeHead = l2;mergeHead.next = mergeTwoLists(l1,l2.next);}return mergeHead;}
}
2.2 循环 – O(n+m)
时间复杂度O(n+m),空间复杂度O(1)
引入伪头节点: 由于初始状态合并链表中无节点,因此循环第一轮时无法将节点添加到合并链表中。解决方案:初始化一个辅助节点
n1
作为合并链表的伪头节点,将各节点添加至n1
之后,n2
为cur
(当前节点)。
/*** 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) {if (list1 == null) return list2;else if (list2 == null) return list1;ListNode n1 = new ListNode(0);ListNode n2 = n1;while (list1 != null && list2 != null){if (list1.val < list2.val){n2.next = list1;list1 = list1.next;}else{n2.next = list2;list2 = list2.next;}n2 = n2.next;}n2.next = list1 != null ? list1 : list2;return n1.next;}
}
3. 参考资料
[1] 面试题25. 合并两个排序的链表(伪头节点,清晰图解)-- 2.2图片来源
相关文章:

【LeetCode】剑指 Offer 25. 合并两个排序的链表 p145 -- Java Version
题目链接:https://leetcode.cn/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof/ 1. 题目介绍(25. 合并两个排序的链表) 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 【测试用例】…...

如何应对危害机房安全的这几个常见要素?
随着现代化进程的推进,各行业对计算机的依赖性日益增高,计算机系统已经成为业务系统的重要组成部分。 在这种情况下,一旦机房设备出现故障,就会影响机房的正常运行,造成严重后果。尤其是银行、证券、海关等需要实时数据…...

【bug】antd全局的主题色样式被覆盖,被修改为`antd`默认的主题色
背景: 项目本身修改了主题色,配置如下: // umi配置文件 export default {theme: {primary-color: #2F54EB, // 全局主色}, };需要对图片上传组件做封装,并在项目中统一引用,如下 import { TdsUpload } from tdsComponents;环境信息 node tiandstiandsdeMacBook…...

MySQL DDL表操作【入门到精通】
目录 一、查询创建 1、查询当前数据库所有表 2、查看指定表结构 3、查询指定表的建表语句 4、创建表结构 二、数据类型 1、数值类型 2、字符串类型 3、日期时间类型 三、表操作-案例 设计一张员工信息表,要求如下: 对应的建表语句如下&#…...

《MySQL系列-InnoDB引擎28》表-约束详细介绍
约束 1 数据完整性 关系型数据库系统和文件系统的一个不同点是,关系数据库本身能保证存储数据的完整性,不需要应用程序的控制,而文件系统一般需要在程序端进行控制。当前几乎所有的关系型数据库都提供约束(constraint)机制,该机制…...
使用docker部署宝塔环境
经常需要部署lnmp环境,宝塔是一个不错的选择,包括安装各种插件,添加网站,设置定时任务等都非常方便。这次使用docker来部署。 拉取centos镜像 docker pull centos启动容器 1.-p端口映射,-d后台运行 2. 文件夹做一下映…...

ORB_SLAM2+kinect稠密建图
下载代码:https://github.com/gaoxiang12/ORBSLAM2_with_pointcloud_map 运行代码: 解压代码后,删掉作者自己编译的build文件夹(下面三个都删除): ~/ORB_SLAM2_modified/build, ~/ORB_SLAM2_modified/T…...

mujoco安装及urdf转xml方法记录
参考 mujoco210及mujoco-py安装 下载适用于Linux或 OSX的 MuJoCo 2.1 版二进制文件 。 将mujoco210的下载的目录解压到~/.mujoco/mujoco210路径下. 注意:如果要为包指定非标准位置,请使用环境变量MUJOCO_PY_MUJOCO_PATH。 验证是否安装成功(…...

Visual Studio 2019 + Qt 项目版本信息新增到资源以及通过代码读取资源存储的版本信息
文章目录前言一、如何在VisualStudio2019中新增项目版本信息二、在程序中调用项目版本信息1.引入库version.lib1.1.通过vs自带的属性页引入库1.2.手动引入库2.新增版本信息读取类3.调用类获取信息总结前言 本文主要讲述如何在Visual Studio 2019 以及Qt结合的开发项目中&#…...

裸辞两个月还能不能找到工作?亲身经历告诉你结果·····
这是我在某论坛看到的一名网友的吐槽: 软件测试四年,主要是手动测试(部分自动化测试和性能测试,但是用的是公司内部自动化工具,而且我自动化方面是弱项。)现在裸辞两个月了,面试机会少而且面试…...
2023华为面试真题
【华为】面试真题: 面试前需要准备: 1. Java 八股文:了解常考的题型和回答思路; 2. 算法:刷 100-200 道题,记住刷题最重要的是要理解其思想,不要死记硬背,碰上原题很难࿰…...

【C++】C++11新特性——基础特性
文章目录一、列表初始化1.1 {}初始化1.2 initializer_list类型二、类型推导2.1 auto2.2 auto注意事项2.3 decltype三、新增与改进3.1 nullptr3.2 范围for3.3 array3.4 forward_list3.5 unordered系列3.6 final与override一、列表初始化 1.1 {}初始化 C11 引入了一个新的初始化…...
Mac 遇到pip: command not found问题的解决
Mac 遇到pip: command not found问题的解决在学习Playwright时候,需要下载相关依赖Playwright 是专门为满足端到端测试的需要而创建的。Playwright 支持所有现代渲染引擎,包括 Chromium、WebKit 和 Firefox。在 Windows、Linux 和 macOS 上进行本地测试或…...

[ 云计算 | Azure ] Episode 03 | 描述云计算运营中的 CapEx 与 OpEx,如何区分 CapEx 与 OpEx
正常情况如果你不是会计,或者对钱相关的数字比较敏感的财务,本文的一些东西你不会接触的,但是最为云架构或者云运营,你可能会遇到如何采购亦或者估算的我成本和运营成本等等,所以本文的一些知识点就需要进行一定的了解…...

STM32F103R8T6 SPWM实现正弦波输出
前言 PWM合成正弦波,原理什么的不详细说了,概括一下就是 PWM有效面积的积分 正弦波的有效面积。PWM的频率越快,细分的越多,锯齿也就越不明显。 做法是:首先利用正弦波取点软件,取点1000个,生…...

Oracle 11g创建和删除数据库实例
一、创建数据库实例 1.点击“开始” -> “Oracle -OraDb11g_home1” -> “Database Configuration Assistant” 2.点击“下一步” 3.选择“创建数据库”,点击“下一步” 4.默认设置,不用更改,直接点击“下一步” 5.填写要创建的“实例…...

MySQL(四)视图、存储过程、触发器
视图、存储过程、触发器视图检查选项视图的更新存储过程存储过程基本语法变量系统变量用户自定义变量局部变量if判断参数casewhile循环repeat循环loop循环cursor游标handler条件处理程序存储函数触发器视图 视图(View)是一种虚拟存在的表。视图中的数据…...

在 Ubuntu 下编写 C++
在 Ubuntu 下编写 C 在 Ubuntu 上面编写 C,本章节内容主要介绍在 Ubuntu 在终端窗口下使用 vi/vim 编辑一 个 C源文件。通过编写最简单的示例“Hello,World!”。带领大家学习如何在 Ubuntu 终端下编 辑和编译 C。这里要求大家会在 Ubuntu 上使用 vi/vim…...
Linux主要目录的意思
Linux目录的意思 文章目录Linux目录的意思bin目录(命令目录):二进制目录,二进制是可以直接执行的机器码,里面存放着可以执行的命令;bin目录右下角有个箭头类似于Windows的快捷方式 sbin目录:系…...

启动golang项目编译的exe可执行文件获取windows管理员权限(UAC)
背景: go代码启动以后里面涉及到修改ip地址等操作,需要管理员权限。打包好的exe文件双击执行默认是没有管理员权限的,那么修改ip就会提示需要管理员权限。 解决方法1:右键以管理员权限运行exe文件 解决方法2:编译exe…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...