哨兵位、链表的链接

哨兵位:

通俗的话讲就是额外开辟一块空间,指向链表的头部。

 合并两个有序链表

已解答

简单

相关标签

相关企业

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

示例 1:

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例 2:

输入:l1 = [], l2 = []
输出:[]

示例 3:

输入:l1 = [], l2 = [0]
输出:[0]

提示:

  • 两个链表的节点数目范围是 [0, 50]
  • -100 <= Node.val <= 100
  • l1 和 l2 均按 非递减顺序 排列

解答:

目录

一、不带哨兵位

二、带哨兵位

三、哨兵位的优缺


一、不带哨兵位

 struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {//链表本身就可能为空!!! 一定不可省略!!!if(list1 == NULL)return list2;else if(list2 == NULL)return list1;struct ListNode* cur1 = list1;struct ListNode* cur2 = list2;struct ListNode* newhead = NULL;  struct ListNode* tail = NULL;  while(cur1 && cur2){    if(cur1->val <= cur2->val){if(newhead == NULL){newhead = tail = cur1;}else{tail->next = cur1;tail = tail->next;}cur1 = cur1->next;}else{if(newhead == NULL){newhead = tail = cur2;}else{tail->next = cur2;tail = tail->next;}cur2 = cur2->next;}}//跳出循环,意味着某个链表结束if(cur2)    //cur1 为空,cur2不能为空!tail->next = cur2;else if(cur1)tail->next = cur1;return newhead;
}

二、带哨兵位

struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {//链表本身就可能为空!!! 一定不可省略!!!if(list1 == NULL)return list2;else if(list2 == NULL)return list1;struct ListNode* cur1 = list1;struct ListNode* cur2 = list2;struct ListNode* newhead = NULL;  struct ListNode* tail = NULL;  //创建哨兵位,头和尾指向哨兵位newhead = tail = (struct ListNode*)malloc(sizeof(struct ListNode));while(cur1 && cur2){    if(cur1->val <= cur2->val){// if(newhead == NULL)  //不用判断是不是空// {//     newhead = tail = cur1;// }tail->next = cur1;tail = tail->next;cur1 = cur1->next;}else{// if(newhead == NULL)// {//     newhead = tail = cur2;// }// else// {tail->next = cur2;tail = tail->next;// }cur2 = cur2->next;}}//跳出循环,意味着某个链表结束if(cur2)    //cur1 为空,cur2不能为空!tail->next = cur2;else if(cur1)tail->next = cur1;struct ListNode* del = newhead;     //释放哨兵位节点newhead = newhead->next;free(del);return newhead;
}

三、哨兵位的优缺

优:可以省去判断是否为空的步骤。

缺:需要主动释放。

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

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

相关文章

java入门学习

程序员必备&#xff1a;常见算法与应用综述 算法是计算机科学的核心&#xff0c;是解决问题的关键。在程序员的日常工作中&#xff0c;算法无处不在。本文将以“程序员常用的几种算法”为主题&#xff0c;从多个维度介绍程序员常用的算法&#xff0c;并分析其适用场景、优缺点…

在 CentOS 7 上编译安装 Nginx 1.18

1. 安装依赖包 首先&#xff0c;安装 Nginx 所需的基本依赖包&#xff1a; yum install -y gcc gcc-c make automake autoconf pcre-devel zlib-devel openssl-devel2. 下载 Nginx 源代码 wget http://nginx.org/download/nginx-1.18.0.tar.gz tar -xzvf nginx-1.18.0.tar.g…

Jupyter R绘图 汉字显示乱码的解决办法

1.Jupyte中&#xff0c;R绘图&#xff0c;汉字显示乱码 2.如何解决&#xff1f; (1)R中安装showtext 登录linux服务器 #R > install.packages(“showtext”) … 出错 (2)退出R,安装freetype-config #apt install libfreetype6-dev 出错 &#xff08;3&#xff09;进入R&…

学习人工智能:Attention Is All You Need-2-Transformer模型;Attention机制;位置编码

3.2 注意力机制Attention 注意力函数可以描述为将查询和一组键值对映射到输出的过程&#xff0c;其中查询、键、值和输出都是向量。输出被计算为值的加权和&#xff0c;其中每个值的权重由查询与相应键的兼容性函数计算得出。 3.2.1 缩放点积注意力 Scaled Dot-Product Attenti…

5.81 BCC工具之tcpconnlat.py解读

一,工具简介 tcpconnlat工具追踪执行活动TCP连接的内核函数(例如,通过connect()系统调用),并显示本地测量的连接延迟(时间):从发送SYN到响应数据包的时间。 二,代码示例 #!/usr/bin/env pythonfrom __future__ import print_function from bcc import BPF from soc…

shentou思路流程

信息收集&#xff1a; 1、获取域名whois信息也就是所谓的资产收集 2、服务器子域名、旁站、c段查询 3、服务器操作系统类型、版本、补丁状况、开放端口&#xff1a;22 ssh 80 web 445 3389.。。 4、web中间件类型、版本、网站目录结构、使用的waf等设备 5、数据库类型、版…

Linux运维_Bash脚本_构建安装MySQL-8.0.18

Linux运维_Bash脚本_构建安装MySQL-8.0.18 Bash (Bourne Again Shell) 是一个解释器&#xff0c;负责处理 Unix 系统命令行上的命令。它是由 Brian Fox 编写的免费软件&#xff0c;并于 1989 年发布的免费软件&#xff0c;作为 Sh (Bourne Shell) 的替代品。 您可以在 Linux …

鸿蒙Harmony应用开发—ArkTS-@AnimatableExtend装饰器:定义可动画属性

AnimatableExtend装饰器用于自定义可动画的属性方法&#xff0c;在这个属性方法中修改组件不可动画的属性。在动画执行过程时&#xff0c;通过逐帧回调函数修改不可动画属性值&#xff0c;让不可动画属性也能实现动画效果。 可动画属性&#xff1a;如果一个属性方法在animation…

【C语言基础篇】内存处理函数(二)memove的介绍及模拟实现

个人主页&#xff1a; 倔强的石头的博客 系列专栏 &#xff1a;C语言指南 C语言刷题系列 待完善补充

无插件网页视频播放器,支持图像绘制(包含方格子、方框等),支持音视频播放、支持录像截图,提供源码下载

前言 本播放器内部采用jessibuca插件接口&#xff0c;支持录像、截图、音视频播放等功能。播放器播放基于ws流&#xff0c;图像绘制操作&#xff1a;1&#xff09;支持绘制方格子&#xff0c;用于监控移动检测画框&#xff1b;2&#xff09;支持绘制不透明方框&#xff0c;用于…

macOS下Java应用的打包和安装程序制作

文章目录 macOS应用程序结构Java应用打包JavaAppLauncherjpackage其它相关JDK命令附录JavaAppLauncher源码链接macOS应用程序结构 macOS通常以dmg或pkg作为软件发行包,安装到/Applications下后,结构比较统一。 info.plist里的CFBundleExecutable字段可以指定入口,如果不指定…

基于JavaWeb+BS架构+SpringBoot+Vue+O2O生鲜食品订购小程序系统的设计和实现

基于JavaWebBS架构SpringBootVueO2O生鲜食品订购小程序系统的设计和实现 文末获取源码Lun文目录前言主要技术系统设计功能截图 文末获取源码 Lun文目录 目 录 摘 要 I Abstract II 1 绪 论 1 1.1课题研究背景及意义 1 1.2研究现状 1 1.3本论文的主要论文结构 3 2系统相关技术…

【工具使用】VScode如何设置中文环境

操作步骤 1.1 安装中文插件 1.2 设置为中文&#xff0c;然后重启 按照插件的使用方法介绍设置中文&#xff1a; 按下“CtrlShiftP”组合键以显示“命令面板”&#xff1a; 输入“dispaly”&#xff0c;选择“Configure Display Language”&#xff1a; 选择“中文简体” …

使用Python和OpenFOAM进行流体力学模拟的基础示例

流体力学模拟通常涉及复杂的数学方程和数值方法&#xff0c;例如计算流体动力学(CFD)。OpenFOAM是一个开源的CFD工具箱&#xff0c;它使用C编写&#xff0c;但可以通过Python脚本进行自动化和定制。 以下是一个简单的示例&#xff0c;展示如何使用Python和OpenFOAM进行流体力学…

【练习】双指针算法思想

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;Java算法&#x1f4d5;格言&#xff1a;那些在暗处执拗生长的花&#xff0c;终有一日会馥郁传香欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 1. 移动零 1.1 题目描述 1.2 讲解算法原理 1.3 编…

请解释 VB.NET 中的命名空间(Namespace)以及它们的作用

请解释 VB.NET 中的命名空间&#xff08;Namespace&#xff09;以及它们的作用 在VB.NET中&#xff0c;命名空间&#xff08;Namespace&#xff09;是一种用于组织和管理代码的机制。命名空间允许开发人员将相关的类、结构、接口和其他类型组织在一起&#xff0c;以便更好地管…

代码随想录 动态规划-子序列问题-子序列(连续)

目录 674.最长连续递增序列 718.最长重复子数组 53.最大子数组和 674.最长连续递增序列 674. 最长连续递增序列 简单 给定一个未经排序的整数数组&#xff0c;找到最长且 连续递增的子序列&#xff0c;并返回该序列的长度。 连续递增的子序列 可以由两个下标 l 和 r&…

数字孪生底层技术框架

数字孪生是一种将现实世界中的物理实体、过程或系统数字化并映射到计算机模型中的方法。它在数学建模与仿真方面具有重要作用&#xff0c;为了实现数字孪生&#xff0c;以下是一些底层技术框架和方法&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业…

【高并发服务器 02】——线程池与IO多路复用

线程池复习 线程池的好处&#xff1a;所有的池都是为了事先把资源准备好&#xff0c;在后续用的时候可以更加方便的拿到这个资源——不用去申请、释放资源 什么时候用线程池&#xff1f; IO&事务并发较高&#xff1a;人在杭州&#xff0c;但是数据库在北京&#xff0c;想要…

企业网络基础设施物理安全面临全新挑战

企业网络基础设施的物理安全是确保业务连续性和数据完整性的关键组成部分。随着技术的发展和环境的变化&#xff0c;这些基础设施面临着新的挑战。以下是一些主要的挑战和的解决方案 一、机房、仓库、档案馆物理安全事件频发的挑战&#xff1a; 1.电力安全事件&#xff1a;市…