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

news2024/9/21 12:26:36

🖊作者 : Djx_hmbb
📘专栏 : 数据结构
😆今日分享 : 英文文章里 : TL;DR 或者 tl;dr。
网上英文解释有两种,一种是Too long;Don’t read,另一种是Too long;Didn’t read。意思是:“文章太长了,读不下去了”。
请添加图片描述

文章目录

  • ✔题目链接;
  • ✔题目:
  • ✔解题思路:
    • :>不用头结点--依次比较每个节点的大小
    • :> 使用头结点--依次比较每个节点的大小
  • ✔代码详情;
    • 🔎不用头结点
    • 🔎用头结点
  • 📖总结 :
    • 家人们,点个![请添加图片描述](https://img-blog.csdnimg.cn/11dae7d2dd1b46b2b021edaccee67cf1.jpeg)再走呗~

✔题目链接;

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

✔题目:

在这里插入图片描述

✔解题思路:

:>不用头结点–依次比较每个节点的大小

创建的 指针 : 新链表的头指针,比较节点大小的当前指针,next指针.请添加图片描述

:> 使用头结点–依次比较每个节点的大小

创建的指针 :

✔代码详情;

🔎不用头结点

struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {
    struct ListNode* p1 = list1;
    struct ListNode* p2 = list2;
    struct ListNode* newNode = NULL,*cur = newNode;
    //如果链表1为空时,返回链表2
    if (list1 == NULL) {
        return list2;
    }
    //如果链表2为空时,返链表1
    if (list2 == NULL) {
        return list1;
    }
    //判断当前节点是否为空,为空时则结束查找比较
    while (p1 && p2) {
        struct ListNode* next1 = p1->next;
        struct ListNode* next2 = p2->next;
        //判断新链表的头结点是否为空
        //头结点为空
        if (newNode == NULL) {
            //取小值进行尾插
            if (p1->val < p2->val) {
                cur = newNode = p1;
                p1 = next1;
                if (next1)
                    next1 = next1->next;
            }
            else  {
                cur = newNode = p2;
                p2 = next2;
                if (next2)
                    next2 = next2->next;
            }
        }
     //头结点不为空
        else {
            if (p1->val < p2->val) {
                cur->next = p1;
                cur = p1;
                p1 = next1;
                if (next1)
                    next1 = next1->next;
            }
            else  {
                cur->next = p2;
                cur = p2;
                p2 = next2;
                if (next2)
                    next2 = next2->next;
            }        
        }
    }
    //判断是哪一个链表先为空的,将不为空的链接到新链表中
    if (p1 == NULL) {
        cur->next = p2;
    }
    else if (p2 == NULL) {
        cur->next = p1;
    }
    //返回
    return newNode;
}

🔎用头结点

struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
        if(l1 == NULL)
            return l2;
        else if(l2 == NULL)
           return l1;
             
        struct ListNode* head = NULL, *tail = NULL;
        //创建空链表
    	head = tail = (struct ListNode*)malloc(sizeof(struct ListNode));
        tail->next = NULL;
        while(l1 && l2)
        {
            // 取小的进行尾插
            if(l1->val < l2->val)
            {
                tail->next = l1;
                tail = tail->next;

                l1 = l1->next;
            }
            else
            {
                tail->next = l2;
                tail = tail->next;

                l2 = l2->next;
            }
        }
        //剩余元素直接拼接
        if(l1)
            tail->next = l1;
        else
            tail->next = l2;

        struct ListNode* list = head->next;
        free(head);
        return list;
}

📖总结 :

带头结点的好处 :

  • 不用考虑新的链表头指针是否为空的情况(代码更简短) .

不带头节点的好处 :

  • 考试基本都是不带头节点的情况 , 这样更有利于我们思维训练 .

感谢家人的阅读,若有不准确的地方 欢迎在评论区指正!

家人们,点个请添加图片描述再走呗~

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

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

相关文章

Stable Diffusion MacBookAir 手把手安装教程,以及checkpoint安装、Lora安装、civitai介绍。

目标&#xff1a; 本地部署Stable Diffusion 安装步骤&#xff1a; 安装git Git - Downloadshttps://git-scm.com/downloads安装python 3.10.6 Python Releases for macOS | Python.orgThe official home of the Python Programming Languagehttps://www.python.org/downl…

再捐1亿元种树治沙:蚂蚁集团持续七年支持内蒙古生态治理

今天&#xff08;4月22日&#xff09;是“世界地球日”&#xff0c;内蒙古自治区林草局与蚂蚁集团启动战略合作&#xff1a;由蚂蚁集团在三年内再捐资1亿元&#xff0c;通过公益项目“蚂蚁森林”支持浑善达克沙地的生态治理。这1亿元将用于当地林草生态的修复保护、沙化土地的治…

助力电力行业数字化,BI 大有可为

各地密集上马的电力工程为上下游产业链发展带去了更多市场机遇&#xff0c;“三零”“三省”办电服务的推广让企业获得了看得见、摸得着的实惠&#xff0c;电力行业正在以自身高质量发展新成效助力经济稳增长&#xff0c;为扎实推进中国式现代化建设注入强劲动能。 电力行业是…

Spring Cloud Gateway Actuator API SpEL表达式注入命令执行(CVE-2022-22947)

Spring Cloud Gateway Actuator API SpEL表达式注入命令执行&#xff08;CVE-2022-22947&#xff09; 0x00 前言 Spring Cloud Gateway是Spring中的一个API网关。其3.1.0及3.0.6版本&#xff08;包含&#xff09;以前存在一处SpEL表达式注入漏洞&#xff0c;当攻击者可以访问…

plt.title()函数中文无法显示问题

文章目录 问题描述解决办法plt.title()函数参数说明 问题描述 由于画图时plt.title()默认是显示英文&#xff0c;如果我们设置标题为中文&#xff0c;会无法显示&#xff0c;如图&#xff1a; plt.title(训练损失) plt.plot(np.arange(len(losses)), losses, -o, colorred) p…

快速学会 IDEA 中 Git 的使用与 GitHub 仓库创建、连接、发布

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; 目录 一、Git &#x1f334;1.Git 工作流程2.Git 安装3.常用命令4.分支 二、远程仓库 GitHub &#x1f335;1.注册使用2.配置 SSH 公钥3.在 IDEA 中配置3.IDEA to GitHub4.创建分支5.commit 到仓库6.从远程仓库中抓…

【数据结构与算法】无队头指针的队列置空队、判队空 、入队和出队算法

题目 Qestion&#xff1a; 假设以带头结点的循环链表表示队列&#xff0c;并且只设一个指针指向队尾元素结点 (注意不设头指针) &#xff0c;试编写相应的置空队、判队空、入队和出队等算法。 核心思路 该队列的特殊之处&#xff1a; 用链表来表示队列该链表为带头节点的链表该…

VM ware workstation安装mac虚拟机

一. 工具准备 VMware workstation mac os的镜像文件&#xff08;链接&#xff1a;https://pan.baidu.com/s/1AdDGFU186bqKvW4wuGtpqw &#xff0c;提取码&#xff1a;tdvc&#xff09; 下载一个auto-unlocker文件&#xff08;https://github.com/paolo-projects/auto-unlocke…

人工智能十大流行算法,通俗易懂讲明白

人工智能是什么&#xff1f;很多人都知道&#xff0c;但大多又都说不清楚。 事实上&#xff0c;人工智能已经存在于我们生活中很久了。 比如我们常常用到的邮箱&#xff0c;其中垃圾邮件过滤就是依靠人工智能&#xff1b;比如每个智能手机都配备的指纹识别或人脸识别&#x…

「QT」QT中new的对象不需要delete的原因

博客主页:何曾参静谧的博客 文章专栏:「QT」QT5快速学习 目录 说明注意事项说明 在QT中,一般来说,通过new关键字创建的对象由QT的对象树来管理,而通过其他方式创建的对象就需要手动释放。QT的对象树可以看做是QT提供的一种内存管理机制,它能够自动地管理和释放对象的内存…

Xilinx之7系列时钟规划失败解析

目录 一 、前言 二、时钟规划 ​2.1 时钟单元经过非时钟路径 2.2 资源不足 2.3 跨半区 一 、前言 在设计的工程中&#xff0c;经常会在implementation的布局或布线阶段失败&#xff0c;下面将针对xilinx 7系列时钟规划失败的场景进行分类描述。本文示例器件为xc7k480tffv1…

华为笔记本怎么录屏?分享2个实用方法

案例&#xff1a;如何对华为笔记本电脑进行屏幕录制&#xff1f; 【今天刚刚了解到电脑可以录屏&#xff0c;但是我拿着我的华为电脑找了半天&#xff0c;也找不到它的屏幕录制功能在哪。华为电脑录屏功能在哪&#xff1f;华为笔记本怎么录屏&#xff1f;有没有大神可以教教我…

DNS缓存失效,nginx死循环访问造成连接数瞬间飚高的问题

0.背景介绍 某服务domain.com.cn 之前DNS解析到服务真实地址10.1.1.11&#xff0c;后面需要对用户登录增加黑名单功能&#xff0c;于是在openresty针对服务domain.com.cn的特性完成了黑名单功能。黑名单功能已经上线几个月&#xff0c;但是DNS从服务真实地址10.1.1.11切换到ope…

Spring MVC 参数解析(13)

目录 简介 调用流程 1. 首先&#xff0c;还是需要进行到前端控制器的doDispatch方法&#xff0c;这是我们的调用Spring MVC的核心入口方法 2. 在doDispatch方法内部&#xff0c;我们调用到了HandlerAdapter.handle(*****) 方法 3. 最终&#xff0c;我们会来到 RequestMappi…

完美解决丨2. `TypeError: list indices must be integers or slices, not str`

‘tuple’ object does not support item assignment 原因&#xff1a; tuple 是一个元素不可变的列表&#xff0c;如果尝试对 tuple 中的某个元素进行修改&#xff0c;会报错。 解决办法&#xff1a; 需要将 tuple 转换为 list&#xff0c;然后再把 list 转换为 tuple。 示例…

最长公共上升子序列LCIS

最长公共上升子序列LCIS 题目链接: acwing272. 最长公共上升子序列 题目描述: 输入输出: 题解: 首先考虑 最长上升子序列和 最长公共子序列问题 最长上升子序列的状态表示与状态转移如下: 状态表示: 用f[i],来表示以A[i]结尾的A[1~i]最长上升子序列的长度(注意&#xff0c;该上…

WPF教程(三)--事件Event调用

1、WPF应用程序的关闭 WPF应用程序的关闭只有在应用程序的 Shutdown 方法被调用时&#xff0c;应用程序才停止运行。 ShutDown 是隐式或显式发生&#xff0c;可以通过指定 ShutdownMode 的属性值来进行设置。 对ShutdownMode选项的更改&#xff0c;可以直接在App.xaml中更改&a…

coinex // 撮合引擎 逻辑流程 (两种数据源 初始化源和前端源)

目录 1 生产者 数据源 1.1. match-server 一启动 初始化数据 自动查询数据库 查询level2要展示的数据 1.2 match-server接收 前端发给Exchange-server的数据 2. 将查询/接受的数据EntrustOrder 转成 Order 解耦 过滤掉不要的属性 3.Order转成 OrderEvent 4. 分配序号发布…

【初学ROS,年轻人的第一个Node节点】

【初学ROS&#xff0c;年轻人的第一个Node节点】 1. 工作空间设置2. 创建Package3. 回访依赖包4. 创建Node节点5. 源码编译6. 运行Node节点7. Node节点完善8. 总结 本教程是B站阿杰视频的笔记 视频地址&#xff1a;https://www.bilibili.com/video/BV1nG411V7HW 超声波传感器 …

界面组件DevExtreme v22.2新版亮点 - 各UI组件增强升级

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合&#xff0c;使您可以利用现代Web开发堆栈&#xff08;包括React&#xff0c;Angular&#xff0c;ASP.NET Core&#xff0c;jQuery&#xff0c;Knockout等&#xff09;构建交互式的Web应用程序。从Angular和Reac&#xff0c…