Leetcode. 21 合并两个有序列表

news2025/1/30 16:37:20

尾插

核心思路:依次比较 ,取经过比较后较小值进行尾插
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.coloradmin.cn/o/396639.html

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

相关文章

c# 32位程序突破2G内存限制

起因 在开发过程中&#xff0c;由于某些COM组件只能在32位程序下运行&#xff0c;程序不得不在X86平台下生成。而X86的32位程序默认内存大小被限制在2G。由于程序中可能存在大数量处理&#xff0c;期间对象若没有及时释放或则回收&#xff0c;内存占用达到了1.2G左右&#xff…

瀑布开发与敏捷开发的区别,以及从瀑布转型敏捷项目管理的5大注意事项

事实证明&#xff0c;瀑布开发管理模式并不适合所有的软件项目&#xff0c;但敏捷项目管理却对大多数项目有效。那么当团队选择转型敏捷的时候有哪些因素必须注意&#xff1f;敏捷开发最早使用者大多是小型、独立的团队&#xff0c;他们通常致力于小型、独立的项目。正是他们的…

Keepalive+LVS群集部署

KeepaliveLVS群集部署一、Keepalive概述1、什么是Keepalive2、Keepalive工作原理3、Keepalive主要模块及作用4、Keepalived 服务重要功能&#xff08;1&#xff09;管理 LVS 负载均衡软件&#xff08;2&#xff09;支持故障自动切换&#xff08;3&#xff09;实现 LVS 负载调度…

SpringBoot下的Spring框架学习(tedu)——day03——Spring DI、SpringAOP JDK动态代理

SpringBoot下的Spring框架学习&#xff08;tedu&#xff09;——day03——Spring DI、SpringAOP JDK动态代理 目录SpringBoot下的Spring框架学习&#xff08;tedu&#xff09;——day03——Spring DI、SpringAOP JDK动态代理1. Spring的依赖注入1.1 依赖注入案例1.1.1 定义接口…

Python的运算符

Python支持多种运算符&#xff0c;下表大致按照优先级从高到低的顺序列出了所有的运算符&#xff0c;运算符的优先级指的是多个运算符同时出现时&#xff0c;先做什么运算然后再做什么运算。除了我们之前已经用过的赋值运算符和算术运算符&#xff0c;我们稍后会陆续讲到其他运…

解决launch:program .exe does not exist

二. 程序的运行和调试 1.launch.json 复制下列代码至launch.json&#xff0c;并根据指导做出相对/绝对路径修改 用 IntelliSense 了解相关属性。 {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息&#xff0c;请访问: https://go.micros…

虹科教您 | 在Linux环境下安装PCAN View及通讯测试指南

应用简介 PCAN-View软件是一款简化的CAN监视软件&#xff0c;可用于显示、发送、和记录CAN数据通讯。报文可手动和定期发送&#xff0c;用户可设置比特率。在处理期间显示总线系统错误和CAN硬件的存储器过满。示踪功能可用于记录和保存CAN数据通讯。本文档的作用在于&#xff…

Python进阶-----面向对象8.0(反射---对象属性方法操作)

目录 前言&#xff1a; 反射 1.getattr() 函数 2.setattr() 函数 3.hasattr() 函数 4.delattr() 函数 前言&#xff1a; 众所周知&#xff0c;每一个实例化对象都是有实例化属性或者方法的&#xff0c;之前我们对实例化对象进行属性方法查询、删除或者添加都是直接去通过…

day27_css

今日内容 上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili 同步笔记沐沐霸的博客_CSDN博客-Java2301 零、 复习昨日 一、CSS 零、 复习昨日 见代码 一 、引言 1.1CSS概念 ​ 层叠样式表(英文全称&#xff1a;Cascading Style Sheets)是一种用来表现HTML&#xff08;标准通…

MpAndroidChart3最强实践攻略

本篇主要总结下Android非常火爆的一个三方库MpAndroidChart的使用。可能在大多数情况下&#xff0c;我们很少会在Android端去开发图表。但如果说去做一些金融财经类、工厂类、大数据类等的app&#xff0c;那么绝对会用到MpAndroidChart。 一、前言 2018年&#xff0c;那年的我…

打包成JAR文件和WAR文件,到底有什么区别?

Spring Boot是一种基于Spring框架的快速开发应用程序的工具&#xff0c;可以轻松地构建可部署的独立应用程序。在使用Spring Boot时&#xff0c;你可能会注意到有两种不同的部署选项&#xff1a;打包成JAR文件和WAR文件。在这篇文章中&#xff0c;我们将深入探讨这两种部署选项…

Netty 简介

一、Netty 简介 Netty 是基于 Java NIO 的异步事件驱动的网络应用框架&#xff0c;使用 Netty 可以快速开发网络应用&#xff0c;Netty 提供了高层次的抽象来简化 TCP 和 UDP 服务器的编程&#xff0c;但是你仍然可以使用底层的 API。 Netty 的内部实现是很复杂的&#xff0c;但…

Mysql常见的函数介绍

Mysql查询示例简介一、创建计算字段二、使用数据处理函数1. 文本处理函数2. 日期和时间处理函数3. 数值处理函数三、聚集函数总结简介 本篇博客中介绍了mysql查询时&#xff0c;常用的一些函数&#xff0c;融会贯通这些函数的使用&#xff0c;会对工作和学习有很大的帮助&#…

【软考中级信安】第四章--网络安全体系与网络安全模型

1.网络安全体系概述1.1 网络安全体系概念网络安全体系&#xff1a;是网络安全保障系统的最高层概念抽象&#xff0c;是由各种网络安全单元按照一定的规则组成的&#xff0c;共同实现网络安全的目标。1.2 网络安全体系特性整体性&#xff1a;网络安全单元按照一定规则&#xff0…

SequoiaDB分布式数据库2023.2月刊

本月看点速览 技术实力获认可&#xff0c;获评多项荣誉 共建人才生态&#xff0c;与深圳大学举办奖学金颁奖仪式 青杉计划2023持续进行&#xff0c;一起攀登更高的“杉” 技术实力获认可&#xff0c;获评多项荣誉 2月&#xff0c;21世纪创投研究院发布“21世纪&#xff08;全…

【20230308】串口接收数据分包问题处理(Linux)

1 问题背景 一包数据可能由于某些传输原因&#xff0c;经常出现一包数据分成几包的情况。 2 解决方法 2.1 通过设定最小读取字符和读取超时时间 可以使用termios结构体来控制终端设备的输入输出。可以通过VTIME和VMIN的值结合起来共同控制对输入的读取。此外&#xff0c;两…

[2.2.1]进程管理——调度的概念、层次

文章目录第二章 进程管理调度的概念、层次&#xff08;一&#xff09;调度的基本概念&#xff08;二&#xff09;调度的三个层次&#xff08;1&#xff09;高级调度&#xff08;2&#xff09;低级调度&#xff08;3&#xff09;中级调度补充知识&#xff1a;进程的挂起态与七状…

第三篇:字符显示原理

使用PCtolLCD2003制作字库注意,我们开始取模前一定要记得设置取模方式,这个取模方式和我们显示屏的显示方式要一致设置字体为宋体,字体大小为16*16(这里当然可以设为别的)输入想要显示的字点击生成字模u8 shuai[] {0x10,0x04,0x10,0x04,0x12,0x04,0x12,0x04,0x92,0x3F,0x92,0x…

HTML 编辑器

文章目录 HTML 编辑器HTML 编辑器推荐编辑器下载网站HBuilder步骤 1: 新建 HTML 文件步骤 2: 另存为 HTML 文件步骤 3: 在浏览器中运行这个 HTML 文件HTML 编辑器 HTML 编辑器推荐 可以使用专业的 HTML 编辑器来编辑 HTML,我为大家推荐几款常用的编辑器: Notepad++:Windows…

蓝桥dfs专题

1、dfs 路径打印 小明冒充X星球的骑士&#xff0c;进入了一个奇怪的城堡。 城堡里边什么都没有&#xff0c;只有方形石头铺成的地面。 假设城堡地面是 n x n 个方格。【如图1.png】所示。 按习俗&#xff0c;骑士要从西北角走到东南角。 可以横向或纵向移动&#xff0c;但不能…