力扣刷题--21.合并两个有序链表

news2024/12/23 23:14:19

I am the best !!!

题目描述

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

示例 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. 初始化:

    • 如果 head1 为空,直接返回 head2

    • 如果 head2 为空,直接返回 head1

    • 创建两个指针 p1q1,分别指向 head1head2

    • 创建一个虚拟头节点 newhead,值为 0。这个虚拟头节点用于简化插入操作。

    • 创建一个尾指针 tail,初始时指向 newhead

  2. 合并链表:

    • p1q1 都不为空时,进行比较和合并操作:
      • 如果 p1->val 小于 q1->val,将 p1 插入到 tail 的后面,然后更新 tailp1

      • 否则,将 q1 插入到 tail 的后面,然后更新 tailq1

    • 更新 p2q2 以记录 p1q1 的下一个节点。

    • 继续循环直到 p1q1 为空。

  3. 处理剩余部分:

    • 如果 p1 为空,说明 head1 已经全部合并,将 tail->next 指向剩余的 q1

    • 如果 q1 为空,说明 head2 已经全部合并,将 tail->next 指向剩余的 p1

  4. 返回结果:

    • 返回 newhead->next,这是合并后的链表实际头节点,跳过虚拟头节点。

复杂度分析:

  • 时间复杂度: O(m + n),其中 m 和 n 分别是两个链表的长度。在最坏情况下,我们需要遍历两个链表的所有节点。

  • 空间复杂度: O(1),只使用了常数级别的额外空间。

完整代码

class Solution {
public:
    ListNode* mergeTwoLists(ListNode* head1, ListNode* head2) {
        if(head1==NULL)
            return head2;
        if(head2==NULL)
            return head1;
        auto p1=head1;
        auto q1=head2;
        auto newhead=new ListNode(0);
        auto tail=newhead;//尾指针
        //p1,q1有一个为空,就结束
        while(p1!=NULL&&q1!=NULL)
        {
            auto p2=p1->next;
            auto q2=q1->next;
            if(p1->val<q1->val)
            {
                //头插,把p1插入到尾指针的后面
                p1->next=tail->next;
                tail->next=p1;
                //tail往后走
                tail=tail->next;
                //p1往后走
                p1=p2;
            }else{
                q1->next=tail->next;
                tail->next=q1;
                
                tail=tail->next;
                q1=q2;
            }
        }
        if(p1==NULL){
            tail->next=q1;
        }else{
            tail->next=p1;
        }
        return newhead->next;


    }
};

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

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

相关文章

【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的虎鲸旅游攻略网的设计与实现

开题报告 随着旅游业的快速发展和互联网的普及&#xff0c;越来越多的人选择通过网络平台获取旅游攻略和分享旅行经验。传统的旅游攻略获取方式往往依赖于纸质书籍或零散的在线资源&#xff0c;这种方式不仅信息更新滞后&#xff0c;而且缺乏互动性和个性化推荐。因此&#xf…

排序算法:直接插入排序,希尔排序,选择排序,快速排序,堆排序,归并排序

1.直接插入排序 基本思想&#xff1a;把待排序的数按照大小逐个插入到前面已经排序好的有序序列中&#xff0c;直到所有的都插入完为止&#xff0c;得到一个新的有序序列。 如图所示&#xff0c;当插入第i个&#xff08;i>1&#xff09;元素的时候&#xff0c;前面的arr[0]…

《OpenCV 图像基础操作全解析:从读取到像素处理与 ROI 应用》

简介&#xff1a;本文详细介绍了使用 OpenCV 进行图像相关操作的基础知识与实践示例&#xff0c;涵盖图像读取&#xff08;包括不同读取方式及对应效果&#xff09;、灰度值概念与图像矩阵存储特点、通道相关知识&#xff08;如 BGR、通道拆分与合并&#xff09;&#xff0c;还…

使用卡尔曼滤波器估计pybullet中的机器人位置

⭐️ 卡尔曼滤波 卡尔曼滤波是一种递归算法&#xff0c;用于从具有噪声的观测中估计系统状态。它特别适合用于线性、高斯动态系统。 笔者之前写过一篇博文介绍卡尔曼滤波器《boss:整个卡尔曼滤波器的简单案例——估计机器人位置》&#xff0c;本文手动实现一个卡尔曼滤波器并…

【尚筹网】二、环境搭建一

【尚筹网】二、环境搭建一 环境搭建总体目标创建工程系统架构图工程创建计划创建空项目创建对应的 Maven 模块建立模块间的依赖 创建数据库基于 Maven 的 Mybatis 的逆向过程配置 pom创建 generatorConfig.xml执行逆向工程操作的 maven 指令将逆向工程生成的资源归位 父工程依赖…

全面解析 JMeter 后置处理器:概念、工作原理与应用场景

在性能测试中&#xff0c;Apache JMeter是一个非常流行的工具&#xff0c;它不仅能够模拟大量用户进行并发访问&#xff0c;还提供了丰富的扩展机制来满足各种复杂的测试需求。后置处理器&#xff08;Post-Processor&#xff09;是JMeter中非常重要的组件之一&#xff0c;用于在…

数字IC后端实现时钟树综合系列教程 | Clock Tree,Clock Skew Group之间的区别和联系

Q: Clock&#xff0c;Clock Tree和Skew Group有何区别&#xff1f;Innovus CCOPT引擎是如何使用这些的&#xff1f; Clock是时序约束SDC中的时钟定义点。 create_clock -name clk_osc -period $period_24m [get_ports xin_osc0_func] 时钟树综合(Clock Tree Synthesis)之前应…

基于零相差前馈补偿的 PID 控制

零相差前馈补偿是一种结合前馈补偿与反馈控制的策略&#xff0c;旨在提高控制系统对参考信号的跟踪精度。通过设计合理的前馈补偿器&#xff0c;使得系统对参考输入实现零相位差的跟踪&#xff0c;同时利用 PID 控制器保证系统的稳定性和动态性能。 1. 原理概述 目标&#xff…

odoo18中模型的常用字段类型

字段的公共属性: Char 字符类型&#xff0c;对应数据库中varchar类型&#xff0c;除了通用类型外接收另外两个参数&#xff1a; size: 字符长度&#xff0c;超出的长度将被截断 trim: 默认True&#xff0c;是否字段值应该被去空白。 Text 文本类型&#xff0c;对应数据库…

Wireshark抓取HTTPS流量技巧

一、工具准备 首先安装wireshark工具&#xff0c;官方链接&#xff1a;Wireshark Go Deep 二、环境变量配置 TLS 加密的核心是会话密钥。这些密钥由客户端和服务器协商生成&#xff0c;用于对通信流量进行对称加密。如果能通过 SSL/TLS 日志文件&#xff08;例如包含密钥的…

鸿蒙生态崛起

1.鸿蒙生态&#xff1a;开发者的新蓝海 从开发者角度看&#xff0c;鸿蒙生态带来了巨大机遇。其分布式能力实现了不同设备间的无缝体验&#xff0c;如多屏协同&#xff0c;让应用能跨手机、平板、智能穿戴和车载设备流畅运行。开发工具也有显著提升&#xff0c;方舟编译器等极大…

【MySQL】精细讲解:数据库内置函数深度学习解析

前言&#xff1a;本节内容讲述mysql里面的函数的概念&#xff0c; 在mysql当中&#xff0c; 内置了很多函数工作。 这些函数丰富了我们的操作。 比如字符串函数、数据函数以及一些其他函数等等。 ps:友友们学习了表的基本操作后就可以观看本节内容啦! 目录 日期函数 current_…

亚信安全与飞书达成深度合作

近日&#xff0c;亚信安全联合飞书举办的“走近先进”系列活动正式走进亚信。活动以“安全护航信息化 共筑数字未来路”为主题&#xff0c;吸引了众多数字化转型前沿企业的近百位领导参会。作为“走近先进”系列的第二场活动&#xff0c;本场活动更加深入挖掘了数字化转型的基础…

[less] Operation on an invalid type

我这个是升级项目的时候遇到的&#xff0c;要从 scss 升级到 less&#xff0c;然后代码中就报了这个错误 我说一下代码的错误过程&#xff0c;但是这里没有复现&#xff0c;因为我原本报错的代码要复杂很多&#xff0c;而且是公司代码&#xff0c;不方便透露&#xff0c;这是我…

“iOS profile文件与私钥证书文件不匹配”总结打ipa包出现的问题

目录 文件和证书未加载或特殊字符问题 证书过期或Profile文件错误 确认开发者证书和私钥是否匹配 创建证书选择错误问题 申请苹果 AppId时勾选服务不全问题 ​总结 在上线ios平台的时候&#xff0c;在Hbuilder中打包遇见了问题&#xff0c;生成ipa文件时候&#xff0c;一…

大语言模型(LLM)安全:十大风险、影响和防御措施

一、什么是大语言模型&#xff08;LLM&#xff09;安全&#xff1f; 大语言模型&#xff08;LLM&#xff09;安全侧重于保护大型语言模型免受各种威胁&#xff0c;这些威胁可能会损害其功能、完整性和所处理的数据。这涉及实施措施来保护模型本身、它使用的数据以及支持它的基…

基础知识学习上

基础知识学习上 1.关于print1.1 format 方法 2.运算符2.1 除法运算2.2 幂运算 3.条件控制语句3.1 if语句3.2 循环语句 4.复杂数据类型4.1列表4.2字典4.3字符串 5.函数 1.关于print 分隔符 print(1, 2, 3, 4, sep-) print(1, 2, 3, 4, sep。)结尾符 print(1, 2, 3, 4, end?) pr…

开源远程桌面工具:RustDesk

在远程办公和远程学习日益普及的今天&#xff0c;我们经常需要远程访问办公电脑或帮助他人解决电脑问题。 市面上的远程控制软件要么收费昂贵&#xff0c;要么需要复杂的配置&#xff0c;更让人担心的是数据安全问题。 最近我发现了一款名为 RustDesk 的开源远程桌面工具&…

双通道CAN转以太网(三格电子)

一、功能描述 SG-CANET-210 是一款用来把 CAN 总线数据转为网口数据的设备。网口支 持 TCP Sever 、TCP Client 、UDP Sever 、UDP Client 、UDP Broadcast 模式&#xff0c;可以 通过软件配置和网页配置。设备提供两路 CAN 接口&#xff0c;两路 CAN 可分别配置为 不同的工作…

WebApis学习笔记,第二节:高级语法

WebApis学习笔记&#xff0c;第二节&#xff1a;高级语法 一、JS组成 我们再回顾一下JS的组成&#xff1a;ECMAScript: 规定了js基础语法核心知识。 比如&#xff1a;变量、分支语句、循环语句、对象等等Web APIs : DOM 文档对象模型&#xff0c; 定义了一套操作HTML文档的AP…