当前位置: 首页 > news >正文

哨兵位、链表的链接

哨兵位:

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

 合并两个有序链表

已解答

简单

相关标签

相关企业

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

示例 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;
}

三、哨兵位的优缺

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

缺:需要主动释放。

相关文章:

  • PTAxt的考研路
  • Python爬虫学习完整版
  • Rust 实战练习 - 4. 网络 TCP/UDP/Channel
  • 两台电脑简单的通信过程详解(经过两个路由器,不同网段)
  • Vue js封装接口
  • Mybatis-01
  • 51单片机学习笔记10 IIC通讯和EEPROM
  • 2024/3/23 蓝桥杯
  • 洁盟、苏泊尔、希亦超声波清洗机哪家好?全方位实测对比谁更强
  • 网络七层模型:理解网络通信的架构(〇)
  • Spring 面试——restcontroller/requestmapping
  • git新建一个项目如何合并其他项目
  • 异步引入组件
  • 机器学习 - 神经网络分类
  • 【牛客】SQL146 0级用户高难度试卷的平均用时和平均得分
  • avalon2.2的VM生成过程
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • HTTP请求重发
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • js 实现textarea输入字数提示
  • JS数组方法汇总
  • js数组之filter
  • Kibana配置logstash,报表一体化
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • Python连接Oracle
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • spring boot下thymeleaf全局静态变量配置
  • vue 个人积累(使用工具,组件)
  • windows下使用nginx调试简介
  • 计算机在识别图像时“看到”了什么?
  • 区块链技术特点之去中心化特性
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 深度学习中的信息论知识详解
  • 数组大概知多少
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 小程序01:wepy框架整合iview webapp UI
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 源码安装memcached和php memcache扩展
  • Semaphore
  • 阿里云服务器购买完整流程
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (1)STL算法之遍历容器
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (poj1.2.1)1970(筛选法模拟)
  • (二)windows配置JDK环境
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • ***测试-HTTP方法
  • .jks文件(JAVA KeyStore)
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET 的程序集加载上下文
  • @ModelAttribute 注解