合并两个有序链表 c++

2023-11-05

LeetCode-21. 合并两个有序链表

题目

21.合并两个有序链表

代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        ListNode *p = list1, *q = list2, *newList, *curr;
        newList = new ListNode(0);
        curr = newList;
        while(p && q) {
            if(p->val < q->val) {
                curr->next = p;
                curr = curr->next;
                p = p->next;
            } else {
                curr->next = q;
                curr = curr->next;
                q = q->next;
            }
        }
        if(p) {
            curr->next = p;
            p = p->next;
            curr = curr->next;
        }
        if(q) {
            curr->next = q;
            q = q->next;
            curr = curr->next;
        }
        return newList->next;
    }
};
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        ListNode *newHead, *p0, *p1, *p2;
        newHead = new ListNode(0);
        p0 = newHead;
        p1 = list1;
        p2 = list2;
        while(p1 && p2) {
            if(p1->val < p2->val) {
                p0->next = p1;
                p1 = p1->next;
            } else {
                p0->next = p2;
                p2 = p2->next;
            }
            p0 = p0->next;
        }
        p0->next = p1 == nullptr ? p2 : p1;
        return newHead->next;
    }
};

思路一

思路一与合并两个有序数组的思路一样,定义一个新链表,比较已给两个链表的值,双指针,小的插到新链表去

思路二

直接改变链表节点的指向,不需要额外内存

如果p1当前节点的值小于等于p2,就把p1当前的节点接在p0节点的后面同时将p1指针往后移一位;反之

这里要注意的是,当p1或p2为NULL时,剩下还需要连接一个节点,所以直接写p0->next = p1 == nullptr ? p2 : p1;

复杂度

思路一:时间复杂度O(n+m),空间复杂度O(n+m)

思路二:时间复杂度O(n+m),空间复杂度O(1)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

合并两个有序链表 c++ 的相关文章

  • Taglib:性能和崩溃问题

    我在 Qt 应用程序中使用 taglib 库 1 7 2 从音乐文件夹中读取 mp3 文件的一些元数据 问题是我发现它非常慢 例如 这是代码 QString path C Music QDir d path QStringList file
  • 如何重写实体数据模型创建的对象上的 Equals?

    我创建了一个实体数据模型 它从 SQLite 数据库中提取记录 其中一个表是 People 我想重写 person Equals 方法 但我不确定去哪里进行这样的更改 因为 Person 对象是自动生成的 我什至看不到该 autogen 代
  • 为什么更新外键后引用约束会不一致?

    抱歉 这个模糊的标题很难用一句话来描述 我有 2 个实体User and UserAddress 其中 User 有 2 个外键DefaultInvoiceAddressId and DefaultDeliveryAddressId和 Us
  • 我们可以在 C# 中定义枚举的隐式转换吗?

    是否可以在 C 中定义枚举的隐式转换 可以实现这一目标的东西吗 public enum MyEnum one 1 two 2 MyEnum number MyEnum one long i number 如果没有 为什么不呢 有一个解决方案
  • MVC。网络错误:初始化字符串的格式不符合从索引 0 开始的规范

    我的连接字符串是
  • 带方括号的 Uri.EscapeUriString

    这是一个奇怪的问题 但让我们看看它会得到什么样的回应 如果我编写一个控制台应用程序 VS 2013 NET 4 5 1 并执行这行代码 Uri EscapeUriString 我明白了 但是 如果我执行同样的事情 嗯 从技术上来说Uri E
  • 运行时两个注册之间的简单注入器基于动态上下文的注入

    我有一个使用 Simple Injector 进行命令处理程序注册的中介应用程序 并且注入和处理程序均已设置并完美运行 class DoWashingCommandHandler IRequestHandler
  • 在宏中使用 # [重复]

    这个问题在这里已经有答案了 请解释一下代码 include
  • 错误 C2065:'cout':未声明的标识符

    我正在处理我的编程作业的 驱动程序 部分 但我不断收到这个荒谬的错误 错误 C2065 cout 未声明的标识符 我什至尝试过使用std cout但我收到另一个错误 IntelliSense 命名空间 std 没有成员 cout 当我宣布u
  • 在 C/C++ 中绘制填充椭圆的简单算法

    在SO上 找到了以下绘制实心圆的简单算法 for int y radius y lt radius y for int x radius x lt radius x if x x y y lt radius radius setpixel
  • VS2010中VSHost.exe不断启动

    我正在 VS2010 中使用一个包含大量项目的解决方案 但它不断变得无响应 我注意到的一件事可能是一条线索 尽管我尚未开始任何调试 但 MyApplicationName vshost exe 不断出现在进程列表中 也许每当构建发生时它就会
  • 如果 .txt 文件不存在,则创建一个,如果存在则追加新行

    我想创建一个 txt 文件并写入它 如果该文件已经存在 我只想添加更多行 string path E AppServ Example txt if File Exists path File Create path TextWriter t
  • Linux C++ 调试器

    我正在寻找完美的 Linux C 调试器 我不期望成功 但搜索应该提供丰富的信息 我是一个非常有能力的 gdb 用户 但 STL 和 Boost 很容易压垮我的调试技能 并不是说我无法深入了解数据结构的内部结构 而是它需要很长时间 我通常会
  • 持续运行的 C# 代码 - 服务还是单独的线程?

    我有一个 NET 4 Web 应用程序 它有 3 个关联的独立项目 DAL BAL 和 UI 我正在使用实体框架进行数据库交互 我有代码循环遍历一堆数据库数据 根据找到的内容调用方法 然后更新数据库 我希望这段代码一直运行 同时 我希望用户
  • 如何在Windows Azure上调用ffmpeg.exe转换音频文件?

    我在 Windows Azure 上运行 Web 角色来接收 AAC 音频文件 通过 base64 字符串上传 并将它们存储到 blob 中 现在效果很好 接下来 我还必须将它们转换为 MP3 并将 MP3 存储到 blob 中 我决定使用
  • WPF MVVM后台打印数据绑定问题

    我正在使用 wpf mvvm 开发一个销售点应用程序 在交易生命周期的许多阶段 都会在后台打印收据 我已经使用其他示例在后台生成和打印收据 我正在后台打印一个 UserControl 一切看起来都很棒 然后 我为该控件创建了 ViewMod
  • Subsonic 3 ActiveRecord 嵌套选择导致 NotIn 错误?

    我有以下 Subsonic 3 0 查询 其中包含嵌套的 NotIn 查询 public List
  • 是否可以在 Eclipse 中为除 Java 之外的 Eclipse 编写插件?

    谁能帮我用c 写一个eclipse插件 weekens 和 celavek 感谢您提供的信息 我正在研究 JNI 并将尝试实现它 celavek 我们必须做什么样的主控 控制 在C 和java接口中处理是否风险更大 我的要求是在 Java
  • 64 位随机生成器种子

    我目前正在运行一个具有 8 个以上管道 线程 的多线程模拟应用程序 这些管道运行非常复杂的代码 该代码取决于种子生成的随机序列 然后该序列被归结为单个 0 1 我希望在将种子从主线程传递到处理管道后 这种 随机处理 具有 100 的确定性
  • 使用反射检测属性的访问修饰符类型

    我编写了一些代码来使用反射查看属性 我已经使用反射从类中检索了属性列表 但是我需要查明该财产是公共的还是受保护的 例如 public string Name get set protected int Age get set Propert

随机推荐

  • NodeJs - for循环的几种遍历方式

    NodeJs for循环的几种遍历方式 一 for循环的几种遍历方式 1 1 遍历的目标不一样 1 2 空属性的遍历 1 3 异步的调用 二 总结 一 for循环的几种遍历方式 我们先来看下for循环的4种不同遍历方式 const arr
  • flutter 屏幕适配插件 flutter_screenutil 的简单使用

    前言 屏幕适配问题一直是app开发中一个绕不开的话题 毕竟现在各种尺寸的设备越来越多 原本一个优美大气的用户页面可能就会因为屏幕尺寸变化而变得杂乱无章 甚至是布局溢出 导致某些重要的信息无法显示 最终并因此而丢失掉用户 因此 屏幕适配是一项
  • DNS请求流程和报文解析

    DNS 域名系统 英文 Domain Name System 缩写 DNS 是互联网的一项服务 它作为将域名和 IP 地址相互映射的一个分布式数据库 能够使人更方便地访问互联网 DNS 的作用是将人类可读的域名 如 www example
  • QT QMap-QMultiMap类实现一键多值的具体应用 (**)

    QT QMap QMultiMap类实现一键多值的具体应用 1 QMap 和 QMultiMap 都具有 一键多值 只是它们的成员函数有些不同 QT QMap QMultiMap类实现一键多值的具体应用 QT QMap QMultiMap类
  • 分数的拆分原理和方法_大梦简书——分数巧算(已更新分数裂项)

    今天大梦老师给大家梳理一下目前阶段会用到的分数巧算 这个也是拖更很久了 今天也终于在寒假上课前有机会给大家系统的写一写 依然是会一直更新的一个帖子 更新日志 19 2 28 更新分数裂项 小升初重点 已标红 PS 注意只有从微信公共号底端菜
  • 卷积神经网络(CNN)

    卷积神经网络 Convolutional Neural Network 简称CNN 是一种前馈神经网络 人工神经元可以响应周围单元 可以进行大型图像处理 卷积神经网络包括卷积层和池化层 在影像处理中 一张图片会被处理成三维矩阵 图片的长宽和
  • 使用jquery解析XML的方法,很简单

    尽量使用高版本的的jquery 有的jquery版本会报没有parseXML属性的错误 我用的jquery 1 7 2 min js xml文件格式
  • 多阶段构建Golang程序Docker镜像方法详解

    为什么要多阶段构建 大家都知道Golang是编译型语言 源码需要先编译再运行 编译过程中需要下载依赖包 最终编译成可执行的二进制文件 只需要部署这个二进制文件即可运行 现在基本都是采用容器化部署方式 打包出的镜像体积越小越好 和程序运行无关
  • Django入门之定义模型和表迁移

    django3 0 定义表模型并通过定义好的模型实现源代码创建数据表 目录 概述 定义表模型 引入模型类 继承 创建表模型 注意 创建数据表 1 生成迁移文件 2 执行迁移 3 更新表文件 总结 概述 模型是一个用于表示数据的Python类
  • 《算法和数据结构》从语言到算法的过渡篇

    本文已收录于专栏 夜深人静写算法 前言 看到太多爆肝熬夜整合的内容 又是几万字 又是爆肝 我也来试试看能不能扛得住 试完后发现 果然还是扛不住啊 但是既然整理完了 那就把我的 算法学习路线 发出来吧 我把整个算法学习的阶段总结成了五个步骤
  • 现代C++教程 笔记

    写在前面 记录一下 现代C 教程 中的要点 现代C 是指C 11之后的语法特性 如无特别说明 下面的语法特性均是C 11后才可使用 一 语言可用性的强化 1 常量 1 1 nullptr 作用 代替NULL赋空指针 使用 char a nu
  • 《ESP32 学习笔记》 之 ESP32 引脚图 及 个引脚特定功能 概览

    ESP32 S 模组 NODEMCU 32S 原理图 各个IO口功能
  • Qt 多线程之线程事件循环(深入理解)

    Qt支持三种类型的信号 槽连接 1 直接连接 当signal发射时 slot立即调用 此slot在发射signal的那个线程中被执行 不一定是接收对象生存的那个线程 2 队列连接 当控制权回到对象属于的那个线程的事件循环时 slot被调用
  • 在pl/sql中执行动态sql

    动态sql就是把sql写在一个字符串里 在存储过程中解析字符串执行sql 这种动态sql很多时候会在别的语言里写 再连接数据库进行操作 这样的确方便很多 例如在java中使用JDBC 但是如果涉及到sql变化很多次 直接在存储过程中写动态s
  • Linux嵌入汇编1- 详解

    Linux上的 GNU C 编译器 GCC 使用 AT T UNIX 汇编语法 源操作数与目的操作数顺序 AT T 语法的操作数方向和 Intel 语法的刚好相反 在Intel 语法中 第一操作数为目的操作数 第二操作数为源操作数 然而在
  • python 使用node_vm2执行js

    有时候 一些js需要调用 之前都是用nodejs比较多 但是有些js会验证是否使用的是node 就比如某头条的加密 为了能本地调用扣下来的js 这里就不能用nodejs或者execjs 需要用到vm2 步骤 1 下载vm2 pip inst
  • 排序与查找代码总结-数据结构与算法python版

    代码来源于北京大学的数据结构与算法课 Python版 注释为本人自己加上的 可供学习使用 不可用于商业转载 有错误烦请指出 感谢 目录 二分查找 普通版 递归版 冒泡排序 普通版 加了是否发生交换的监测 选择排序 插入排序 希尔排序 归并排
  • C语言

    C 菜鸟教程 C 结构体位域
  • win7搭建虚拟pppoe服务器,Win7在桌面建立一个pppoe宽带自动连接器的方法

    本教程告诉大家如何在Win7在桌面建立一个pppoe宽带自动连接器教程 现在电脑已经普及使用了 每次开机都要连接宽带上网 很多用户说如何快速在Windows桌面建立一个PPPOE宽带连接 方便直接连接 之前在xp系统可以建立pppoe宽带自
  • 合并两个有序链表 c++

    LeetCode 21 合并两个有序链表 题目 21 合并两个有序链表 代码 Definition for singly linked list struct ListNode int val ListNode next ListNode