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

以下为力扣官方题解,及本人代码

21. 合并两个有序链表

  • 题目
    • 题意
    • 示例 1
    • 示例 2
    • 示例 3
    • 提示
  • 官方题解
    • 迭代
      • 思路
      • 算法
      • 复杂度
  • 本人代码
    • Java
    • 提交结果:通过

题目

题意

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

示例 1

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

示例 2

输入 l 1 = [ ] l1 = [] l1=[], l 2 = [ ] l2 = [] l2=[]
输出 [ ] [] []

示例 3

输入 l 1 = [ ] l1 = [] l1=[], l 2 = [ 0 ] l2 = [0] l2=[0]
输出 [ 0 ] [0] [0]

提示

  • 两个链表的节点数目范围是 [ 0 , 50 ] [0, 50] [0,50]
  • − 100 < = N o d e . v a l < = 100 -100 <= Node.val <= 100 100<=Node.val<=100
  • l 1 l1 l1 l 2 l2 l2 均按非递减顺序排列

官方题解

迭代

思路

我们可以用迭代的方法来实现上述算法。当 l 1 l1 l1 l 2 l2 l2 都不是空链表时,判断 l 1 l1 l1 l 2 l2 l2 哪一个链表的头节点的值更小,将较小值的节点添加到结果里,当一个节点被添加到结果里之后,将对应链表中的节点向后移一位。

算法

首先,我们设定一个哨兵节点 p r e h e a d prehead prehead,这可以在最后让我们比较容易地返回合并后的链表。我们维护一个 p r e v prev prev 指针,我们需要做的是调整它的 n e x t next next 指针。然后,我们重复以下过程,直到 l 1 l1 l1 或者 l 2 l2 l2 指向了 n u l l null null

  • 如果 l 1 l1 l1 当前节点的值小于等于 l 2 l2 l2,我们就把 l 1 l1 l1 当前的节点接在 p r e v prev prev 节点的后面,同时将 l 1 l1 l1 指针往后移一位。
  • 否则,我们对 l 2 l2 l2 做同样的操作。
  • 不管我们将哪一个元素接在了后面,我们都需要把 p r e v prev prev 向后移一位。

在循环终止的时候, l 1 l1 l1 l 2 l2 l2 至多有一个是非空的。由于输入的两个链表都是有序的,所以不管哪个链表是非空的,它包含的所有元素都比前面已经合并链表中的所有元素都要大。这意味着我们只需要简单地将非空链表接在合并链表的后面,并返回合并链表即可。

复杂度

  • 时间复杂度: O ( n + m ) O(n+m) O(n+m),其中 n n n m m m 分别为两个链表的长度。因为每次循环迭代中, l 1 l1 l1 l 2 l2 l2 只有一个元素会被放进合并链表中,因此 w h i l e while while 循环的次数不会超过两个链表的长度之和。所有其他操作的时间复杂度都是常数级别的,因此总的时间复杂度为 O ( n + m ) O(n+ m) O(n+m)
  • 空间复杂度: O ( 1 ) O(1) O(1)。我们只需要常数的空间存放若干变量。

本人代码

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 cur = new ListNode(-1);ListNode ans = cur;//循环将两个列表合并while (list1 != null && list2 != null) {if (list1.val <= list2.val) {cur.next = list1;list1 = list1.next;} else {cur.next = list2;list2 = list2.next;}cur = cur.next;}//如果list1为空,说明list2的长度大于等于list1,不管是哪种情况都可以把list2剩下的元素添加到ans中,反之亦然cur.next = list1 != null ? list1 : list2;//第一个节点是自定义的-1,因此跳过return ans.next;    }
}

提交结果:通过

  • 执行用时: 0 m s 0ms 0ms
  • 内存消耗: 40.2 M B 40.2MB 40.2MB

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

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

相关文章

【Linux】【预】配置VSCode阅读和编写Linux驱动的代码环境

配置VSCode阅读和编写Linux驱动代码环境 1. 安装vscode&#xff0c;以及配置vscode环境2. 安装VScode相关的插件3. 配置vscode4.总结 1. 安装vscode&#xff0c;以及配置vscode环境 安装vscode请点击如下连接 https://code.visualstudio.com/download2. 安装VScode相关的插件…

SSM(Vue3+ElementPlus+Axios+SSM前后端分离)--搭建Vue 前端工程[一]

文章目录 SSM--搭建Vue 前端工程--项目基础界面实现功能01-搭建Vue 前端工程需求分析/图解代码实现搭建Vue 前端工程下载node.js LTS 并安装: node.js 的npm创建Vue 项目使用idea 打开ssm_vue 项目, 并配置项目启动 Vue3 项目目录结构梳理Vue3 项目结构介绍 配置Vue 服务端口El…

记一次kernel patch(附开源贡献相关)

文章目录 开源操作系统流程手记smatch能发现的典型问题常见的修复方案附&#xff1a;偶然发现&#xff0c;unlikely函数搞开源贡献的一些捷径 开源操作系统 看了zhihu上的一些科普&#xff0c;明白二次开发是常见现象&#xff0c;套壳、抄袭、自研都不是很科学的说法。中外大厂…

Dockerfile构建mysql

使用dockerfile构建mysql详细教学加案例 Dockerfile 文件 # 使用官方5.6版本&#xff0c;latest为默认版本 FROM mysql:5.6 #复制my.cof至容器内 ADD my.cnf /etc/mysql/my.cof #设置环境变量 密码 ENV MYSQL_ROOT_PASSWORD123456my.cof 文件 [mysqld] character-set-server…

IDEA SpringBoot Maven profiles 配置

IDEA SpringBoot Maven profiles 配置 IDEA版本&#xff1a; IntelliJ IDEA 2022.2.3 注意&#xff1a;切换环境之后务必点击一下刷新&#xff0c;推荐点击耗时更短。 application.yaml spring:profiles:active: env多环境文件名&#xff1a; application-dev.yaml、 applicat…

【MATLAB第63期】基于MATLAB的改进敏感性分析方法IPCC,拥挤距离与皮尔逊系数法结合实现回归与分类预测

【MATLAB第63期】基于MATLAB的改进敏感性分析方法IPCC&#xff0c;拥挤距离与皮尔逊系数法结合实现回归与分类预测 思路 考虑拥挤距离指标与PCC皮尔逊相关系数法相结合&#xff0c;对回归或分类数据进行降维&#xff0c;通过SVM支持向量机交叉验证得到平均指标&#xff0c;来…

基于CentOS 7构建LVS-DR集群

DIPVIPRIPClient192.169.41.139 LVS 192.168.41.134192.169.41.10RS1192.168.41.135RS2192.168.41.138 要求&#xff1a; node4为客户端&#xff0c;node2为LVS&#xff0c;node3和node4为RS。 1.配置DNS解析&#xff08;我这里使用本地解析&#xff09; 192.168.41.134 www.y…

盛最多水的容器 LeetCode热题100

题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 思路 双指针法&#xff0c;一左le…

一、8.分页

当物理内存不够时就把不常用的内存暂时存入磁盘&#xff0c;并且描述符的P位置0&#xff0c;把要使用的段放入内存&#xff0c;描述符P位置1 但是这种方式会产生大量内存碎片&#xff0c;影响内存分配效率 设想一个虚拟内存&#xff0c;每隔任务都有他独立的虚拟内存&#xf…

Node.js-path模块操作路径的基本使用

path模块提供了操作路径的功能&#xff0c;以下为常用的API。 path.resolve()&#xff1a;拼接规范的绝对路径 const path require("path"); // 目录的绝对路径 // __dirname: D:\node\path const pathStr path.resolve(__dirname, "index.html"); // 拼…

golang pprof 监控系列—— cpu 占用率 统计原理

经过前面的几节对pprof的介绍&#xff0c;对pprof统计的原理算是掌握了七八十了&#xff0c;我们对memory,block,mutex,trace,goroutine,threadcreate这些维度的统计原理都进行了分析&#xff0c;但唯独还没有分析pprof 工具是如何统计cpu使用情况的&#xff0c;今天我们来分析…

PostGIS-实时地理数据切片与处理

实时地理数据切片与处理 实时地理数据切片技术 在处理大规模地理矢量数据时,需要解决以下问题: 高效地定位数据位置在数据量过大时进行抽稀以减少返回数据量进行要素的简化以优化显示效果参考: 参考链接 单机部署方案 使用 PostgreSQL-12+PostGIS-3.0 单机方案可实现所有…

[Pytorch]卷积运算conv2d

文章目录 [Pytorch]卷积运算conv2d一.F.Conv2d二.nn.Conv2d三.nn.Conv2d的运算过程 [Pytorch]卷积运算conv2d 一.F.Conv2d torch.nn.functional.Conv2d()的详细参数&#xff1a; conv2d(input: Tensor, weight: Tensor, bias: Optional[Tensor]None, stride: Union[_int, _s…

常见Charles在Windows10抓包乱码问题

废话不多说 直接开整 最近反复安装证书还是乱码 网上各种百度还是不行 首先计算机查看安装好的证书 certmgr.msc 找到并删除掉 重新安装证书 具体解决方法&#xff1a; 第一步&#xff1a;点击 【工具栏–>Proxy–>SSL Proxying Settings…】 第二步&#xff1a;配置…

C++路线(全网20篇高赞文章总结)

为节省时间&#xff0c;可直接跳转到 --> &#x1f33c;干货 目录 &#x1f33c;前言 &#x1f33c;来源 &#x1f416;现状 &#x1f33c;干货 入门阶段 入门项目 学习顺序 &#x1f409;大二打算 &#x1f33c;前言 来源的20篇博客&#xff0c;视频中&#x…

XML约束和解析

文章目录 概述使用场景语法dtd约束Schema约束解析DOM4j&#xff08;重点&#xff09; 概述 可扩展的标记性语言 使用场景 以前: 传输数据的媒介。 例如&#xff1a;微服务架构中&#xff0c;可以用xml文件进行多语言之间的的联系。 现在: 做配置文件 现在作为传输数据的媒介…

sentinel引入CommonFilter类

最近在做一个springcloudAlibaba项目&#xff0c;做链路流控模式时需要将入口资源关闭聚合&#xff0c;做法如下&#xff1a; spring-cloud-alibaba v2.1.1.RELEASE及前&#xff0c;sentinel1.7.0及后&#xff1a; 1.pom 中引入&#xff1a; <dependency><groupId>…

【java】使用maven完成一个servlet项目

一、创建项目 创建一个maven项目 maven是一个管理java项目的工具&#xff0c;根据maven的pom.xml可以引入各种依赖&#xff0c;插件。 步骤 打开idea&#xff0c;点击新建项目 点击创建项目&#xff0c;项目创建就完成了 进入时会自动打开pom.xml文件。 pom是项目的配置文件…

css, resize 拖拉宽度

效果如下&#xff1a; 可直接复制预览查看属性值: 关键样式属性&#xff1a; resize: horizontal; overflow-x: auto; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content…

【一次调频】考虑储能电池参与一次调频技术经济模型的容量配置方法(Matlab代码实现)

目录 &#x1f4a5;1 概述 1.1 文献来源 1.2 储能电池参与一次调频的方法 1.3 流程图 &#x1f4da;2 运行结果 2.1 数据 2.2 文献结果 2.3 复现结果 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码、数据、文章讲解 &#x1f4a5;1 概述 1.1 文献来源 摘要&#xff1a;规…