【算法】链表:21.合并两个有序链表(easy)

news2024/10/2 5:12:21

 系列专栏

《分治》

《模拟》

《Linux》


目录

1、题目链接

2、题目介绍

3、解法(双指针)

4、代码 


1、题目链接

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

2、题目介绍

3、解法(双指针)

推荐一篇题解题解 - 力扣(LeetCode)

  1. 解决方法
    • 使用一个伪头节点来简化边界条件的处理,特别是在插入第一个节点时。这避免了处理空链表或只有一个元素的特殊情况。
    • 使用一个指针 tmp 来遍历新链表,并始终保持它指向新链表的最后一个节点,以便于进行尾插操作。
    • 遍历两个给定的链表 list1 和 list2,比较当前节点的值,将较小的节点插入到新链表中,并移动相应链表的指针到下一个节点。
    • 当其中一个链表遍历完毕后,将另一个链表剩余的节点直接连接到新链表的末尾。
  2. 代码实现
    • 初始化伪头节点 head 和临时指针 tmp
    • 使用 while 循环遍历两个链表,直到其中一个链表为空。
      • 在循环内部,比较 list1 和 list2 当前节点的值。
      • 将值较小的节点插入到新链表中(即设置 tmp->next),并移动对应链表的指针。
      • 移动 tmp 指针到新链表的最后一个节点。
    • 使用两个额外的 while 循环来处理剩余的链表(如果有的话)。由于已经遍历过两个链表的一部分或全部,这两个循环中至多有一个会执行。
      • 这两个循环的目的是将剩余链表的所有节点连接到新链表的末尾。
    • 返回新链表的头节点(即 head->next,因为 head 是一个伪头节点)。细节很重要!!!

4、代码 

class Solution {
public:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {

        ListNode* head = new ListNode(0);//初始化伪头节点,便于遍历和返回
        ListNode* tmp = head;//在新链表中,指向最后一个结点,便于实现尾插

        while (list1 != nullptr && list2 != nullptr)
        {

            if (list1->val < list2->val)
            {
                tmp->next = list1;
                list1 = list1->next;
            }
            else {
                tmp->next = list2;
                list2 = list2->next;
            }
            tmp = tmp->next;
        }
        //tmp->next = list1 != nullptr ? list1 : list2;
        while (list1 != NULL)
        {
            tmp->next = list1;
            list1 = list1->next;
            tmp = tmp->next;

        }
        while (list2 != NULL)
        {
            tmp->next = list2;
            list2 = list2->next;
            tmp = tmp->next;

        }
        return head->next;//返回真正的头节点
    }

};

 


💗感谢阅读!💗

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

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

相关文章

Arduino UNO R3自学笔记13 之 Arduino使用LM35如何测量温度?

注意&#xff1a;学习和写作过程中&#xff0c;部分资料搜集于互联网&#xff0c;如有侵权请联系删除。 前言&#xff1a;学习使用传感器测温。 1.LM35介绍 一般来讲当知道需求&#xff0c;就可以 通过既定要求的条件来筛选需要的器件&#xff0c;多方面的因素最终选定了器件…

c语言实例

大家好&#xff0c;欢迎来到无限大的频道 今天给大家带来的是c语言 题目描述 创建一个双链表&#xff0c;并将链表中的数据输出到控制台&#xff0c;输入要查找的数据&#xff0c;将查找到的数据删除&#xff0c;并且显示删除后的链表 下面是一个用C语言实现的双链表&#…

数据结构-4.2.串的定义和基本操作

一.串的定义&#xff1a; 1.单/双引号不是字符串里的内容&#xff0c;他只是一个边界符&#xff0c;用来表示字符串的头和尾&#xff1b; 2.空串也是字符串的子串&#xff0c;空串长度为0&#xff1b; 3.字符的编号是从1开始&#xff0c;不是0&#xff1b; 4.空格也是字符&a…

Windows 11 安装配置 Git 教程

目录 Git Windows 11 环境安装配置 Git Git Git是一个开源的分布式版本控制系统&#xff0c;由Linus Torvalds创建&#xff0c;用于有效、高速地处理从小到大的项目版本管理。Git是目前世界上最流行的版本控制系统&#xff0c;广泛应用于软件开发中。 以下是Git的一些关键特…

Python空间地表联动贝叶斯地震风险计算模型

&#x1f3af;要点 使用贝叶斯推断模型兼顾路径和场地效应&#xff0c;量化传统地理统计曲线拟合技术。使用破裂和场地特征等地质信息以及事件间残差和事件内残差描述数学模型模型使用欧几里得距离度量、角距离度量和土壤差异性度量确定贝叶斯先验分布和后验分布参数&#xff…

使用Qt实现实时数据动态绘制的折线图示例

基于Qt的 QChartView 和定时器来动态绘制折线图。它通过动画的方式逐步将数据点添加到图表上&#xff0c;并动态更新坐标轴的范围&#xff0c;提供了一个可以实时更新数据的折线图应用。以下是对代码的详细介绍及其功能解析&#xff1a; 代码概述 该程序使用Qt的 QChartView…

【Python报错已解决】 Encountered error while trying to install package.> lxml

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

黑马linux笔记(转载)

学习链接 视频链接&#xff1a;黑马程序员新版Linux零基础快速入门到精通 原文链接&#xff1a;黑马程序员新版Linux零基础快速入门到精通——学习笔记 黑马Linux笔记 文章目录 学习链接01初识Linux1.1、操作系统概述1.1.1、硬件和软件1.1.2、操作系统1.1.3、常见操作系统 1.…

10/01赛后总结

T1隔离 题目传送门&#xff1a;隔离http://bbcoj.cn/contest/1027/problem/1 实在是太刁钻了&#xff0c;有两种情况没有考虑&#xff1a; 1.隔离后做完全部的是再回去 2.在路程上花的时间如果大于在隔离一次花的时间&#xff0c;那还不如隔离&#xff0c;然后做完全部的事…

阿里云域名注册购买和备案

文章目录 1、阿里云首页搜索 域名注册2、点击 控制台3、域名控制台 1、阿里云首页搜索 域名注册 2、点击 控制台 3、域名控制台

聊聊Mysql的MVCC

1 什么是MVCC&#xff1f; MVCC&#xff0c;是Multiversion Concurrency Control的缩写&#xff0c;翻译过来是多版本并发控制&#xff0c;和数据库锁一样&#xff0c;他也是一种并发控制的解决方案。 我们知道&#xff0c;在数据库中&#xff0c;对数据的操作主要有2种&#…

Java项目实战II基于Java+Spring Boot+MySQL的购物推荐网站的设计与实现(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者 一、前言 随着互联网技术的飞速发展&#xff0c;电子商务已成为人们日常生活中不可或缺的一部分。然而&#xf…

论文笔记:基于细粒度融合网络和跨模态一致性学习的多模态假新闻检测

整理了MMAsia2023 Cross-modal Consistency Learning with Fine-grained Fusion Network for Multimodal Fake News Detection 论文的阅读笔记 背景模型筛选模块 实验消融实验超参数讨论可视化 背景 尽管以往的工作已经观察到假新闻中文字与图像的不匹配&#xff0c;但他们仍致…

大数据毕业设计选题推荐-民族服饰数据分析系统-Python数据可视化-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

DNS with libevent

DNS with libevent: high-level and low-level functionality libevent提供了少量用于解析DNS名字的API&#xff0c;以及用于实现简单DNS服务器的机制。 我们从用于名字查询的高层机制开始介绍&#xff0c;然后介绍底层机制和服务器机制。 Portable blocking name resolution…

八、SPOOLING技术

1.早期脱机技术 外围控制机更高速的设备--磁带 作用:缓解设备与CPU的速度矛盾&#xff0c;实现预输入、缓输出 批处理阶段引入了脱机输入/输出技术(用磁带完成): 引入脱机技术后&#xff0c;缓解了CPU与慢速I/O设备的速度矛盾。另一方面&#xff0c;即使CPU在忙碌&#xff0…

【Windows】在任务管理器中隐藏进程

在此前的一篇&#xff0c;我们已经介绍过了注入Dll 阻止任务管理器结束进程 -- Win 10/11。本篇利用 hook NtQuerySystemInformation 并进行断链的方法实现进程隐身&#xff0c;实测支持 taskmgr.exe 的任意多进程隐身。 任务管理器 代码&#xff1a; // dllmain.cpp : 定义 …

MongoDB微服务部署

一、安装MongoDB 1.在linux中拉去MongoDB镜像文件 docker pull mongo:4.4.18 2. 2.创建数据挂载目录 linux命令创建 命令创建目录: mkdir -p /usr/local/docker/mongodb/data 可以在sshclient工具查看是否创建成功。 进入moogodb目录&#xff0c;给data赋予权限777 cd …

2024-09-04 深入JavaScript高级语法十五——浏览器原理-V8引擎-js执行原理

目录 1、浏览器的工作原理1.1、认识浏览器内核1.2、浏览器渲染过程 2、JS引擎2.1、认识 JavaScript 引擎2.2、浏览器内核和JS引擎的关系2.3、V8引擎的原理2.4、V8引擎的架构2.5、V8执行的细节 3、全局代码的执行过程3.1、初始化全局对象3.2、执行上下文栈&#xff08;调用栈&am…

World of Warcraft [CLASSIC][80][Grandel] Call to Arms: Victory in Wintergrasp

Wintergrasp 冬拥湖 120 VS 120 Victory in Wintergrasp - Quest - 魔兽世界怀旧服WLK3.35数据库_巫妖王之怒80级魔兽数据库_wlk数据库