链表:虚拟头节点你会用吗?

大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。

前言:什么是链表

什么是链表,链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。

链表的入口节点称为链表的头结点也就是head。
在这里插入图片描述
如上图,是一个单链表,单链表的指针只能指向下一个data域。链表的节点在内存中是分散存储的,通过指针连在一起;链表的最后一个节点的引用为空,表示链表的结束,也就是我们所说的空指针。

为什么要引入虚拟头节点

虚拟头节点是一个在链表头部添加的额外节点,它不存储任何实际的数据,只是作为辅助。虚拟头节点的引入可以简化链表操作的逻辑,并解决一些特殊情况下的边界问题。

通过引入虚拟头节点,我们可以在处理链表时统一操作逻辑。无论是在链表的开头、中间还是末尾插入或删除节点,我们都可以使用相同的逻辑进行操作。这减少了代码中的条件判断,使得代码更加简洁和易于理解。

虚拟头节点还能够解决空链表的情况。如果链表为空且没有虚拟头节点,我们需要对空链表和非空链表进行不同的处理。然而,通过添加虚拟头节点,链表的头部始终存在,我们可以统一对链表进行处理,无论链表是否为空。

举例说明:

比如有一条链表,现在我要对链表中的某个节点进行删除操作,现在我要将链表中的第三个节点删除,那么应该怎么操作?
在这里插入图片描述
如图所示:我只需要将2的指针域 next 指向下一个节点,也就是第四个节点;此时需要注意的是,在c语言中,data域3还在内存中,需要手动释放内存,但是在java中,则不需要自己去手动释放内存。

同理,新增操作如下:
在这里插入图片描述
我们只需要将2的指针next指向新增的对象,新增的对象的指针域next指向节点3,这样就成功在节点2和3之间插入了新增节点。

删除链表元素:使用虚拟节点(Dummy Head Node)

正如我上面所说,如果删除链表中的某个元素,只需要删除的这个值的前一个对象的指针指向删除对象的下一个值即可,但是如果我现在删除的对象是链表的第一个元素,那该怎么办,已经是第一个元素了前面已经没有指针域指向下一个值了。

移除头结点和移除其他节点的操作是不一样的,因为链表的其他节点都是通过前一个节点来移除当前节点,而头结点没有前一个节点。所以头结点如何移除呢,其实只要将头结点向后移动一位就可以,这样就从链表中移除了一个头结点。这样移除了一个头结点,你会发现,在单链表中移除头结点 和 移除其他节点的操作方式是不一样,需要单独写一段逻辑来处理移除头结点的情况。

我们来看一个示例应用,展示虚拟头节点如何简化链表操作。假设我们要在一个有序链表中插入一个新节点。如果没有虚拟头节点,我们需要单独处理链表为空和不为空的情况。而有了虚拟头节点,我们只需要找到插入位置,创建新节点,并更新引用即可,无需特殊处理空链表情况。

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode removeElements(ListNode head, int val) {if(head == null) {return head;}ListNode dummy = new ListNode(-1, head);// 设置虚拟首节点ListNode cur = head;// 临时节点ListNode pre = dummy;while(cur != null) {if(cur.val == val) {pre.next = cur.next;    } else {pre = cur;}cur = cur.next;}return dummy.next;// 注意,返回的是虚拟节点的下一个节点,因为虚拟节点只是我们定义的,不是真正意义上存在数据的节点,虚拟节点的next节点才是真正的头节点}
}

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

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

相关文章

利润的来源:会员权益的前置和后置

一、会员收益 现有市场的会员产品中,其收益往往来自于两个方向: 一是通过对用户收取高会员费实行价格歧视进而达到直接增收的目的; 二是通过免费或者低会员费来进行拉新从而促进整体消费提升;亦或是增加用户的沉没成本,阻止用户…

【网络】UDP的应用场景

文章目录 翻译功能命令行解析网络聊天室UDP之Windows与Linux 翻译功能 我们写的UDP服务端并不是只接收到数据就完了,还需要进行处理任务。 我们可以在服务端udpServer.hpp中设置一个回调函数 _callback,具体的逻辑通过udpServer.cc中由外部进行传入 代…

如何免费制作证件照

(1)打开微信,在小程序中搜索【万能工具助手】 (2)打开万能工具助手 选择好证件照尺寸,导入图片,它会自动抠除照片的原背景,点击“背景色”更换证件照底色,点击“美颜”&a…

如何制作电子证件照?十秒学会这个方法

如何制作电子证件照?现如今我们只要在网站办事或者说是报名考试都会使用到电子版的证件照,可以说电子证件照的应用十分广泛。那么问题来了,电子证件照如何制作呢?其实制作电子证件照并不困难,我们自己就可以完成。这里…

免费在线证件照制作-超级好用

地址:https://www.remove.bg/ 步骤: 1. 上传图片 2. 生成的图片,右上角覆盖了一个按钮,点击edit(编辑) 3. 点击编辑后,出现弹窗,切换到color。color第一个是取色器,自己随意选择颜色。还有常用…

证件照的要求是什么?

1.证件照的要求是免冠(不戴帽子)正面照片,照片上正常应该看到人的两耳轮廓和相当于男士的喉结处的地方 2.照片尺寸可以为一寸或二寸,颜色可以为黑白或彩色,拍照时不得上唇膏等影响真实面貌的化妆色彩,包括头发的染色。 3.拍照时…

手机上怎么照证件照照片?教你两招轻松拍出证件照

怎么使用手机拍出证件照呢?证件照是我们在日常生活或者是工作中必备的一个证件,很多地方都会用得到,大家在照证件照的时候一般都会去照相馆拍摄,但是随着现在电子科技的进步,我们已经可以使用手机就能够拍出美美的证件…

​可以给证件照换衣服的软件有哪些?教你如何一键换装

有什么软件可以给证件照换衣服呢?证件照是我们大学毕业之后必备的一种证件,报名各种考试或者是找工作都是需要使用到的。但是大家在使用证件照的时候,往往会因为各种原因使我们的证件照不合规定,其中就有因为服装不够正式导致使用…

毕业生找工作必备技能——自己制作正装证件照

又到了毕业季,又是令人忙忙碌碌的找工作阶段,都说今年是毕业生找工作最难的一年,希望大家都能找到心仪的工作。找工作之前,大家简历所需的正装证件照都准备的怎么样了?是否必须跑一趟照相馆再照一张正装的照片呢&#…

简历上面的证件照怎么制作?学会这个方法轻松制作

简历上面的证件照该怎么制作呢?很多小伙伴在大学毕业后,就需要找一份工作,而找工作的时候必然需要使用简历,简历上面是需要放我们的证件照的,而一份合适的证件照会让HR对我们更好的第一印象,从而也就增加面…

我的【毕业照】

2021年05月16日 毕业照 这是一篇没有谈论、介绍技术的文章,有的只是照片写真 #1 班级 四年的青春就这样宣布结束了 一张九宫图怎能承载我们的青春,愿大家前程似锦 #2 BAT高级架构师合照 就这样轻松流畅地过渡到宿舍集体照 留给我们的宿舍集体照不多&…

考研证件照要求?如何制作考研用的证件照?

考研报报名网上确认环节,网上确认的时候需要准备电子照片。疫情阶段今天教给大家不需要出门就可以方便,快捷的制作合格的证件照,免去出门办理和审核不过的麻烦! 考研证件照要求: 1. 本人近三个月内正面、免冠、无妆、彩…

高考准考证的照片要跟大学四年吗?快GET保姆级最美证件照全攻略!

很多学弟学妹们都私信我,问高考准考证上的那张丑照真的要跟大学四年吗?的确,那个时候大家都熬夜苦读,哪有闲情逸致去打扮自己呢?就算拍照那天精心打扮了,得,死亡黑眼圈、死亡化妆技术、丑到爆的…

证件照还能直接换装?别再为了证件照买衣服了!证件照1秒换装换底色教程

在日常的工作学习生活当中,我们常常会用到证件照。但不同应用场景的证件照往往会对衣服、背景色、尺寸格式等等都有着不同的需求,比如:简历照需要穿正装、毕业照需要学士服、法考照不得着制服等等,这也给大家带来了很多麻烦&#…

社保证照片怎么做?一招教你get既专业又好看的证件照!

又到了毕业季,又有一大批小可爱即将涌入社会的浪潮!回想起我自己刚入社会的时候,最迫切需要了解却又最茫然无措的就是社保的问题。那些政策云云宛若天书,分明每个字都认识,可连在一起就是啥也看不懂!于是在…

SAP中贸易伙伴的应用原理简析

公司也称为贸易伙伴,是出具合并报表的组织单位,可以为客户和供应商分配公司(贸易伙伴),用于识别集团内关闻公司间的业务往来,在编制合并报表时进行往来账务的计算处理。 如下图某贸易伙伴公司(关…

山东大学——结算中的贸易单据

山东大学——结算中的贸易单据 结算中的贸易单据 结算中的贸易单据 国际贸易结算中,银行收付款是以单据为前提的。 单据的作用: →出口商履行买卖合约的证明; →对进口商来说,是货物的代表,是进口商付款的凭证; →重要的国际贸易融资手段。 单据按照其重…

相同名字比对公式,相似度对比算法

公司注册:公司名称相似如何认定? 公司名称相似有两种:名字当中的文字有与其它公司重叠(三个字有两个相同)、不同经营类型的公司名称,比如:“XX市美好家具贸易有限公司”和“XX市美好沐足服务有…

报价单与贸易术语关系

报价单,是新人接触外贸时必须用功的对象,也是新人实操过程中最关心的问题。 报价单是商业行为文件,包括报价单的头部、产品基本资料、产品技术参数、价格条款、数量条款、支付条、质量条款、交货期条款、品牌条款、原产地条款、报价单附注的其他资料等&a…

跨境贸易PayPal收款,个人美金额度不够了,如何提现美金?

很多做跨境贸易的朋友,总会遇到一些客户通过PayPal支付。自己提现几次,每年超过5万美元结汇额度之后,个人额度就不够了, 用亲属的又很麻烦。那么个人结汇,每年超过5万美元结汇额度之后,该如何将多余的美元低…