哨兵位及用哨兵位实现链表的链接

news2024/9/22 7:32:01

哨兵位:

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

 合并两个有序链表

已解答

简单

相关标签

相关企业

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

示例 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.coloradmin.cn/o/1536850.html

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

相关文章

思腾合力受邀出席文化和旅游虚拟现实应用推广交流活动并作主题演讲

3月21日&#xff0c;由文化和旅游部产业发展司主办&#xff0c;中国信息通信研究院、北京市石景山区文化和旅游局、中国动漫集团有限公司承办的“数字赋能文旅场景建设行动——文化和旅游虚拟现实应用推广交流活动”在北京首钢一高炉SoReal科幻乐园成功举办。 思腾合力CMO徐莉受…

北斗卫星在公路养护中的应用

北斗卫星在公路养护中的应用 北斗卫星是我国自主研发的一款卫星导航系统&#xff0c;它为公路养护工作提供了新的解决方案。通过使用北斗卫星技术&#xff0c;公路养护部门可以实时获取道路状况&#xff0c;提高工作效率&#xff0c;为交通安全保驾护航。 首先&#xff0c;北斗…

海边游艇港口迈入智能新纪元:数字孪生系统引领未来趋势

在浩瀚的海洋边&#xff0c;游艇港口不仅是停泊游艇的港湾&#xff0c;更是展现城市风貌与智慧科技的窗口。如今&#xff0c;随着数字化技术的飞速发展&#xff0c;海边游艇港口也迎来了前所未有的变革——数字孪生系统的应用&#xff0c;正悄然改变着传统游艇港口的运营模式&a…

【书生·浦语大模型实战营】学习笔记2

Lagent&#xff1a;智能体框架&#xff0c;实现将一个大语言模型转化为多种类型的智能体&#xff0c;更好地发挥InternLM的性能 浦语灵笔&#xff1a;视觉语言大模型 InternLM-Chat-7B智能对话Demo 环境准备 使用复制的internlm-demo环境 # 执行该脚本文件来安装项目实验环境…

GPT-5可能会在今年夏天作为对ChatGPT的“实质性改进”而到来

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

明明有这个字段但是又一直说不存在,完美解决 Unknown column ‘xxx ‘ in ‘where clause‘

一、情景再现 二、排查错因&#xff1a;仔细看多了空格&#xff0c;映射的时候就有问题 三、去看映射&#xff0c;果然多了空格&#xff0c;去掉空格&#xff0c;重启 四、完美解决

PyTorch深度学习:遥感影像地物分类的高效工具

我国高分辨率对地观测系统重大专项已全面启动&#xff0c;高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成&#xff0c;将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB&#xff0c;遥感大数据时…

《数字集成电路物理设计》学习笔记(持续更新中)

参考书籍&#xff1a; 《数字集成电路物理设计》pdf下载百度云链接&#xff1a; 链接: https://pan.baidu.com/s/1jOD54q_f9KLhfX6InabTRA?pwd8888 提取码: 8888 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 --来自百度网盘超级会员v8的分享 目录 第1章 集…

Swift 中的 Sequence 是什么 ?

在 Swift 中&#xff0c;Sequence 是一个协议&#xff0c;它表示一个可以遍历其元素的集合类型。任何遵循 Sequence 协议的类型都必须提供一个迭代器&#xff0c;用于按顺序访问其元素。迭代器是通过 makeIterator() 方法获取的&#xff0c;该方法返回一个遵循 IteratorProtoco…

进程控制 | 认识fork函数 | 进程终止 | 进程等待

进程创建 初始fork函数 fork函数是为了创建子进程而生的&#xff0c;通过fork函数之后&#xff0c;我们的父进程的代码和数据是共享的&#xff0c;我们这里是可以通过man手册进行查询的&#xff0c;查询之后是可以发现fork函数是会返回两个值的至于为什么会返回两个值&#x…

备考ICA----Istio实验1---Istio部署和Bookinfo

备考ICA----Istio实验1—Istio部署和Bookinfo 打算2024年4月份考Istio的ICA认证,系统的再把Istio相关功能的实验再摸排一遍 本套实验环境如下 序号软件版本1UbuntuUbuntu 20.04.6 LTS2Kubernetesv1.29.23kubeadmv1.29.24Istio1.20.35Envoy1.20.3 candidatemaster:~$ kubectl…

opengl两个光源下的球体

定义一个红色聚光灯源&#xff0c;一个漫反射的蓝色点光源 //light0 为漫反射的蓝色点光源glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);glLightfv(GL_LIGHT0, GL_POSITION, light0_position); //light1 为红色聚光光源glLightfv(GL_LIGHT1, GL_AMBIENT, light1_ambient…

AI智能分析网关V4养老院视频智能监控方案

随着科技的快速发展&#xff0c;智能监控技术已经广泛应用于各个领域&#xff0c;尤其在养老院这一特定场景中&#xff0c;智能监控方案更是发挥着不可或缺的作用。尤其是伴随着社会老龄化趋势的加剧&#xff0c;养老院的安全管理问题也日益凸显。为了确保老人的生活安全&#…

[HackMyVM]靶场 XMAS

kali:192.168.56.104 靶机:192.168.56.126 注意在/etc/hosts 添加 192.168.56.126 christmas.hmv # cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 kali2 192.168.223.131 dc-2 192.168.223.134 wordy 192.168.56.105 midn…

CSDN个人简介优化 html font属性

CSDN个人简介优化 html font属性 个人简介个人简介优化字体21种样式选择字体大小设置4号字体 字体颜色设计渐变色&#xff08;可惜不能显示&#xff09; 字体加粗设置 <b>标签 个人简介 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光…

element的el-table自定义最后一行

场景&#xff1a; 最后一行要显示一些其他结果&#xff0c;用的是element ui 自带的数据总计的属性&#xff1b;返回一个数组&#xff0c;会按下标进行展示。 代码&#xff1a; <el-table :summary-method"getSummaries"show-summary :data"tableData"…

牛客周赛 Round 37 C.红魔馆的馆主

非常恶心的诈骗&#xff0c;手玩了半小时&#xff0c;发现了一堆规律&#xff0c;比如是11的倍数的偶数数位和奇数数位要相等 还搞上了逆元&#xff0c;是5的倍数必须0 or 5结尾&#xff0c;是9的倍数必须数位之和是9的倍数结果做不出来 然后不是构造是纯纯的暴搜 直接暴力看…

JavaScript中的Lexical Environment

概要 本文主要介绍JavaScript中的一个重要概念Lexical Environment&#xff0c;它可以帮助我们解释我们为什么可以通过嵌套方法&#xff0c;共享数据&#xff0c;以及为什么可以在函数中定义一个和全局变量同名的变量&#xff0c;并且不会影响到全局变量。 基本分析 基本概念…

国产之光?Kimichat大模型200万字超长上下文突破

Kimi Chat简介 Kimi是AI大模型初创企业月之暗面&#xff08;Moonshot&#xff09;推出的AI产品。近日月之暗面宣布Kimi 智能助手在长上下文窗口技术上再次取得突破&#xff0c;无损上下文长度提升了一个数量级到200万字。 月之暗面&#xff08;Moonshot AI&#xff09;&#…

leetcode刷题(javaScript)——BFS广度优先遍历相关场景题总结

广度优先搜索&#xff08;BFS&#xff09;在JavaScript编程中有许多实际应用场景&#xff0c;特别是在解决图、树等数据结构相关问题时非常常见。在JavaScript中&#xff0c;可以使用队列来实现广度优先搜索算法。通过将起始节点加入队列&#xff0c;然后迭代地将节点的邻居节点…