合并两个有序链表 题解

news2025/2/26 1:59:36

题目描述:21. 合并两个有序链表 - 力扣(LeetCode)

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

 题解思路:

  1. 创建一个新的链表,并将头节点设置为 newHead,用两个指针current1、current2分别指向链表的头节点;(这里便于尾插,可以用一个尾指针指向新链表末尾和创建一个带哨兵位头结点的链表,返回值为newHead->next)
  2. 比较current1、current2指向节点数值大小:如果current1的数值大于current2,则将current2作为新节点尾插在newHead后面,current2向后移动;如果current1的数值小于或等于current2,则将current1作为新节点尾插在newHead后面,current1向后移动;
  3. 重复步骤二,直到current1、current2有一个指向NULL;如果current1指向NULL(current2没有指向NULL),就把current2剩余节点全部尾插到新链表后面;如果current2指向NULL(current1没有指向NULL),就把current1剩余节点全部尾插到新链表后面;
  4. 返回新链表的头节点newHead。

代码:

struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{
    struct ListNode* newHead = (struct ListNode*)malloc(sizeof(struct ListNode));
    newHead->next = NULL;
    struct ListNode* tail = newHead;
    struct ListNode* current1 = list1, *current2 = list2;
    while(current1 && current2)
    {
        // 比较
        if(current1->val > current2->val)
        {
            // 尾插
            struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
            newNode->val = current2->val;
            newNode->next = NULL;
            tail->next = newNode;
            tail = newNode;
            current2 = current2->next;
        }
        else
        {
            struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
            newNode->val = current1->val;
            newNode->next = NULL;
            tail->next = newNode;
            tail = newNode;
            current1 = current1->next;
        }

    }
    if(current1) //current1 有剩余节点
    {
        tail->next = current1;
    }
    if(current2) //current2 有剩余节点
    {
        tail->next = current2;
    }
    return newHead->next;
}

注:这里尾插的的时候可以不进行创建新的节点,可以直接用原链表的节点进行连接即可。

struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{
    if (list1 == NULL)
        return list2;
    if (list2 == NULL)
        return list1;
    struct ListNode* head = NULL,  * tail = NULL;
    head = tail = (struct ListNode*)malloc(sizeof(struct ListNode));
    while (list1 && list2)
    {
        if (list1->val > list2->val)
        {

            tail->next = list2;
            tail = tail->next;
            list2 = list2->next;

        }
        else
        {

            tail->next = list1;
            tail = tail->next;
            list1 = list1->next;
        }
    }
    if(list1 != NULL)
    {
        tail->next = list1;        
    }
    if(list2 != NULL)
    {
        tail->next = list2;
    }
    return head->next;
}

 显然这种方法更好,但其思路是一模一样的。


本次内容到此结束了!如果你觉得这篇博客对你有帮助的话 ,希望你能够给我点个赞,鼓励一下我。感谢感谢……

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

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

相关文章

合成数据平台:释放结构化数据的生成式 AI 的力量

推荐:使用 NSDT场景编辑器 快速助你搭建可二次编辑的3D应用场景 创建机器学习或深度学习模型非常简单。如今,有不同的工具和平台不仅可以自动化创建模型的整个过程,甚至可以帮助您为特定数据集选择最佳模型。 通过创建模型解决问题所需的基本…

Linux系列:从0到1用Docker部署springboot项目

目录 1.前提条件 2.编写DockerFile镜像文件 3.打包SpringBoot项目 4.通过软件Xftp进行传输(*) 1.点击“文件-新建”​编辑 5.操作远程主机 1.docker构建 2.容器运行 6.容器的关闭和删除 1.前提条件 Linux、docker、xftp的安装、一台可以访问的远…

2023年“云舟杯”视频孪生演讲大赛总决赛完美收官

8月4日,智汇云舟举办的2023年“云舟杯”视频孪生演讲大赛总决赛以直播形式完美收官。来自全国近200家合作伙伴代表齐聚线上,共同观摩比赛。在巅峰之战中,参赛学员们充分展示了各自对行业数字化转型的敏锐洞察、对智汇云舟视频孪生技术与产品的…

Fortinet数据中心防火墙及服务ROI超300%!Forrester TEI研究发布

近日,专注网络与安全融合的全球网络安全领导者 Fortinet(NASDAQ:FTNT)联合全球知名分析机构Forrester发布总体经济影响独立分析报告,详细阐述了在企业数据中心部署 FortiGate 下一代防火墙(NGFW&#xff09…

从黑马程序员电商视觉设计上半年就业数据,看当下数字产业人才需求热点

近期,老牌数字化人才培训机构传智教育旗下的高端IT教育品牌——黑马程序员发布了2023上半年电商视觉设计学科的就业数据,班级平均就业率92%,一线城市平均月薪9161元,所有毕业生平均月薪8969元。 电商视觉设计行业热度高&#xff0…

Git (2)

文章目录 1. 删除文件2. 分支管理2.1 理解分支2.2 分支创建 , 分支切换2.3 分支合并2.4 删除分支2.5 合并冲突2.6 合并模式2.7 分支策略2.8 bug 分支2.9 强制删除分支 3. 远程操作3.1 创建远程仓库3.2 克隆远程仓库3.3 推送3.4 拉取3.5 gitignore 文件3.6 配置别名 …

Android侧滑栏(一)可缩放可一起移动的侧滑栏

在实际的各类App开发中,经常会需要做一个左侧的侧滑栏,类似于QQ这种。 今天这篇文章总结下自己在开发中遇到的这类可以跟随移动且可以缩放的侧滑栏。 一、实现原理 使用 HorizontalScrollView 实现一个水平方向的可滑动的View,左布局为侧滑…

为c语言安装easyx图形库

按照图上的步骤&#xff0c;安装easyx图形库。 接下来看代码&#xff1a; #include<easyx.h> #include<stdio.h> #define width 800 #define height 600int main() {initgraph(width, height); // 初始化窗口&#xff08;宽度&#xff0c; 高度&#xff09;…

OpenHarmony社区运营报告(2023年7月)

本月快讯 • 2023年7月28日-29日&#xff0c;全球软件质量&效能大会&#xff08;简称“QECon”&#xff09;圆满举行&#xff0c;OpenAtom OpenHarmony&#xff08;简称“OpenHarmony”&#xff09;以“优质高效测试助力OpenHarmony北向应用生态赋能”为主题&#xff0c;以…

Java项目作业~ 通过html+Servlet+MyBatis,完成站点信息的添加功能

需求&#xff1a; 通过htmlServletMyBatis&#xff0c;完成站点信息的添加功能。 以下是站点表的建表语句&#xff1a; CREATE TABLE websites (id int(11) NOT NULL AUTO_INCREMENT,name char(20) NOT NULL DEFAULT COMMENT 站点名称,url varchar(255) NOT NULL DEFAULT ,…

目标识别模型两种部署形态图

目标检测预训练模型基于新数据进行微调&#xff08;训练&#xff09;之后&#xff0c;得到一个权重文件。 在日常工业、车载等需求环境下&#xff0c;需要在嵌入式移动端的软件系统中调用该模型文件进行推断测试&#xff0c;软件系统追求性能经常使用C/C进行编码实现&#xff…

Apipost接口自动化中关联关系如何配置

在接口自动化测试中&#xff0c;接口之间可能存在依赖关系&#xff0c;即某些接口的执行需要先完成其他接口的执行。为了确保测试用例的正确执行&#xff0c;我们需要在配置测试用例时考虑接口之间的依赖关系。在编写测试用例时&#xff0c;需要明确每个接口的功能和输入输出参…

注册亚马逊买家账号需要什么资料

注册亚马逊买家账号通常需要以下基本资料&#xff1a; 1、邮箱&#xff1a;您需要一个有效的邮箱&#xff0c;用于注册账号和接收与账户相关的通知。 2、密码&#xff1a;选择一个安全的密码&#xff0c;以确保您的账号信息安全。 3、姓名&#xff1a;提供您的全名或常用的姓…

高忆管理:今年来尚未有公司递表,香港SPAC市场为何“熄火”?

香港SPAC上市准则敞开之后&#xff0c;从第一家公司上市到现在已经有1年多的时刻。&#xff08;【深度】王石、李宁、卫哲争相发起建立SPAC&#xff0c;香港版“上市盲盒”会火吗&#xff1f; 界面新闻了解到&#xff0c;今年以来&#xff0c;香港SPAC并没有新动态&#xff0c;…

Linux 文件查看命令

一、cat命令 1.cat文件名&#xff0c;查看文件内容&#xff1a; 例如&#xff0c;查看main.c文件的内容&#xff1a; 2.cat < 文件名&#xff0c;往文件中写入数据&#xff0c; Ctrld是结束输入 例如&#xff0c;向文件a.txt中写入数据&#xff1a; 查看刚刚写入a.txt的…

linux网络编程-libevent

libevent介绍 1 事件驱动, 高性能, 轻量级, 专注于网络 2 源代码精炼, 易读 3 跨平台 4 支持多种I/O多路复用技术, 如epoll select poll等 5 支持I/O和信号等事件 1.libevent的安装 登录官方网站: http://libevent.org, 查看相关信息 libevent源码下载主要分2个大版本&…

Linux中使用split切割文件,按行或者文件大小切割

环境中有5G大小的文件1千多万行&#xff0c;需要按行数切割&#xff0c;使用linux中的split工具可快速实现。 示例&#xff1a;测试文件造的是100万行&#xff0c;按行数切割&#xff1a; split -d -l 80000 test.txt qiege --additional-suffix.txt -d表示切割后的文件按照…

Dex文件混淆(一):BlackObfuscator

Dex文件混淆(一)&#xff1a;BlackObfuscator 首发地址:http://zhuoyue360.com/crack/105.html 文章目录 Dex文件混淆(一)&#xff1a;BlackObfuscator1. 前言2.小试牛刀3. 参考学习1. dex2jar源码简析2. BlackObfuscator简析1. 控制流平坦化1. 控制流平坦化基本介绍 2. Dex解析…

职场新星:Java面试干货让你笑傲求职路(三)

职场新星&#xff1a;Java面试干货让你笑傲求职路 1、token 为什么存放在 redis 中&#xff1f;2、索引的底层原理是什么&#xff1f;3、Spring IOC和AOP的原理4、接口和抽象类有什么共同点和区别&#xff1f;5、为什么要使用线程池&#xff1f;直接new个线程不好吗&#xff1f…

C语言函数详解(2)

目录 函数的声明和定义 函数声明 函数定义 函数递归 什么是递归 递归的两个必要条件 练习1 练习2 练习3 练习4 函数的声明和定义 函数声明 1. 告诉编译器有一个函数叫什么&#xff0c;参数是什么&#xff0c;返回类型是什么。但是具体是不是存在&#xff0c;函数声明决定…