Leetcode. 21 合并两个有序列表

news/2025/1/13 2:50:16/

尾插

核心思路:依次比较 ,取经过比较后较小值进行尾插
cur1 指向list1 ,cur 2指向list2 ,当cur1走完list1 或者cur2 走完list2 后停止
如果cur1走完list1 ,可以将cur2 整个拿下来尾插
如果cur2走完list2 ,可以将cur1 整个拿下来尾插

特殊情况 : 如果list1 是空链表 返回 list2
如果list2 是空链表 返回 list1

在这里插入图片描述

struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{struct ListNode*tail = NULL ;struct ListNode* cur1 = list1 ;struct ListNode* cur2 = list2;struct ListNode* head = NULL;//空链表if(list1 ==NULL){return list2 ;}if( list2 ==NULL){return list1 ;}//非空链表//依次比较 while ( cur1 && cur2)  //其中一个链表走完了就结束循环{if( cur1->val < cur2->val)  //list1 <list2{//尾插if ( head == NULL) {head =tail =cur1 ;}else {tail->next= cur1 ;tail =tail->next ;}cur1 =cur1->next ;}else {if ( head ==NULL) {head =tail =cur2 ;}else {tail->next= cur2 ;tail =tail->next ;}cur2 =cur2->next ;}}if( cur1) //cur2已经走完list2 ,直接将cur1整个拿下来尾插{tail->next =cur1 ;} if( cur2) //cur1已经走完list1 ,直接将cur2整个拿下来尾插{tail->next =cur2 ;} return head ;
}

哨兵位头节点

哨兵位头节点 是一个附加的链表节点.该节点作为第一个节点,它的数据域不存储任何东西
只是为了操作的方便而引入的

如果一个链表有哨兵节点的话,那么线性表的第一个元素应该是链表的第二个节点
也就是说返回这个链表,应该返回哨兵位的next,因为哨兵位的next才是有效的真实的头节点

要注意使用完哨兵位头节点后,对其进行释放,避免内存泄漏

哨兵位头节点相比较上面的解法 ,不需要判断tail是否为空 (tail 不会为空)

在这里插入图片描述

struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{struct ListNode* guard = (struct ListNode*)malloc( sizeof(struct ListNode)); struct ListNode* tail = guard ;struct ListNode* cur1 = list1 ;struct ListNode* cur2 = list2 ;tail->next = NULL ;while ( cur1 &&cur2)    //两个链表都不为空{//尾插 if( cur1->val < cur2->val){tail->next = cur1 ;cur1 = cur1->next ; tail = tail->next ;}else {tail->next = cur2 ;cur2 = cur2->next ; tail = tail->next ; }}    // cur1 走完list1 if( cur2){tail->next = cur2 ;}if( cur1)   // cur2 走完list2  {tail->next = cur1 ;} struct ListNode*  head = guard->next ; return head ;free(guard);//要注意使用完哨兵位头节点后,对其进行释放,避免内存泄漏}

如果你觉得这篇文章对你有帮助,不妨动动手指给点赞收藏加转发,给鄃鳕一个大大的关注
你们的每一次支持都将转化为我前进的动力!!!


http://www.ppmy.cn/news/30979.html

相关文章

SAP 更改物料基本计量单位

前言部分 在SAP中物料创建后&#xff0c;一旦发生业务&#xff0c;其基本计量单位便很难修改。由于单位无法满足业务要求&#xff0c;往往会要求新建一个物料替代旧物料。这时候除了要将旧物料上所有的未清业务删除外&#xff0c;还需要替换工艺与BOM中的旧物料。特别是当出现旧…

快速了解原码、反码、补码和位运算

我们知道计算机使用的是二进制&#xff0c;我们⽤⼀个字节&#xff0c;也就是8个bit 来表示⼆进制数。 原码 十进制 原码20000 0010-21000 0010 原码其实是最容易理解的&#xff0c;只不过需要利⽤⼆进制中的第⼀位来表示符号位&#xff0c;0表示正数&#xff0c;1表示…

liunx下安装node exporter

1 建立文件夹 cd /opt mkdir software 下载最新的包&#xff0c;并解压 https://prometheus.io/download/ 下载 curl -LO https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz 3.解压 tar -xvf node_exporter-0.…

MySQL索引15连问,抗住!

1. 索引是什么&#xff1f;索引是一种能提高数据库查询效率的数据结构。它可以比作一本字典的目录&#xff0c;可以帮你快速找到对应的记录。索引一般存储在磁盘的文件中&#xff0c;它是占用物理空间的。正所谓水能载舟&#xff0c;也能覆舟。适当的索引能提高查询效率&#x…

Spring的IOC/DI,依赖注入的实现

Spring的IOC/DI&#xff0c;依赖注入的实现 https://download.csdn.net/download/weixin_41957626/87546826 资源地址 1.什么是Spring 1.1spring3 的体系结构图 图1 spring3的体系结构图 图2 spring4体系结构图 比较spring3的体系结构图&#xff0c;spring4去掉了spring3中的st…

C++——IO流

目录 C语言的输入与输出 流是什么 CIO流 C标准IO流 C文件IO流 二进制读写 文本读写 stringstream的简单介绍 C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键 盘)读取数据&#xff0c;并将值存放在变量中。…

【卷积神经网络】激活函数 | Tanh / Sigmoid / ReLU / Leaky ReLU / ELU / SiLU / GeLU

文章目录一、Tanh二、Sigmoid三、ReLU四、Leaky ReLU五、ELU六、SiLU七、Mish本文主要介绍卷积神经网络中常用的激活函数及其各自的优缺点 最简单的激活函数被称为线性激活&#xff0c;其中没有应用任何转换。 一个仅由线性激活函数组成的网络很容易训练&#xff0c;但不能学习…

【编程基础之Python】12、Python中的语句

【编程基础之Python】12、Python中的语句Python中的语句赋值语句条件语句循环语句for循环while循环continue语句break语句continue与break的区别函数语句pass语句异常处理语句结论Python中的语句 Python是一种高级编程语言&#xff0c;具有简单易学的语法&#xff0c;适用于各…