畅谈链表---初级篇2---谈谈链表的头指针与头结点

阅读此篇请先关注上一篇博文—畅谈链表—初级篇1—谈谈链表结构本身https://blog.csdn.net/qq_44406656/article/details/99010348
其中是我对链表结构本身提供了自己的架构,将链表形式抽象为了房屋。

将头指针和头结点单独拿出来写一篇文章在我看来并非多此一举,理解好头结点与头指针对将来刷题是有一些帮助的。

算不上题外话的题外话:链表的头指针以及头结点

先来谈谈头指针
头指针究竟是何方神圣
我们往往会使用一个头指针来对整个单链表进行标识,为什么要有这个标识呢?因为这个街区的建造人发现,他们的其他房子卖的都很火热,就这个1号房,常常无人问津,做了调查才发现,原来大家都非常的妒忌别的房子有路牌的指引,而这个1号房就没有,那别人来拜访1号房的主人时岂不是有一些麻烦,于是街区建造人决定,给这个1号房增添路牌!
(以上均为胡扯!因为CodeChickenTom街区的人脑子都不太正常!请注意,我编这个故事的原因是帮助大家记忆一般链表都有这样一个头指针的存在,不然怎么看这个链表确实也是缺少了点什么)

再来谈谈头结点
牛x的头结点

我们首先明确一点,头指针始终指向的是链表中的第一个结点!!!,若此时链表中有头结点,则头指针的指向就是头结点。如图上所示,第一块路牌指向CodeChickenTom保安室。一般来说,看到了保安室,我们也就都心知肚明,我们已经来到了这个街区。

  • 头结点的数据域可以不设任何信息,也可以记录某些链表信息(针对需求)

头结点这个保安室是一个非常牛的存在,有些人的快递丢在这里,一些装修的材料可以暂放在保安室中,也有些时候这里空空如也…这就告诉我们,头结点中数据域可以不设置任何元素,也可以存放一些链表的信息,例如长度等…

  • 链表的第一个位置表中其他位置操作一致,无需进行特殊处理

正是因为这个保安室的加入,街区内部优化建设也变得容易起来,过去的1号房做一些优化建设(例如1号房的审查不合格需要拆除,或者是在1号房和别的房子之间盖起一幢新房子等)总是要区别于别的房子,而现在有了保安室,其优化建设也变得和其他房子一样了。(这里我暗示的就是删除与插入操作,预知后事如何,且听未来分解)。

  • 空表与非空表的处理得到了统一

我们对判断这个街区是不是一个毛都没有的空街区的判断也做了一个统一:若保安室之后的路牌没有指向任何房子,即可说明这是一个空街区。(CodeChickenTom街区保安室
== nullptr即为街区为空的判断条件)。关于这一点,很多考题喜欢拿这个头结点判断链表为空做文章,有疑问就可以在脑中想一想,关于这种街区的"链表观"到底是怎么架构的,问题就随之解决了。

ps:自行添加一个头结点。那为什么在LeetCode这种对待时间和空间复杂度极为"功利"的环境下,程序员们硬是要添加一个头结点进去呢?答案就是头结点的加入实在是大大优化了整体的操作,使链表操作部分的代码更加易懂(不仅是对看代码的人,写的人也是十分受益的)。故利用好头结点,是学好链表操作的一个重要指标。

下一篇博文开始,我会开始拆分单链表中的一些基本操作,我最初因为天资愚钝,理解这些代码真的非常痛苦,但自从套用了这种街区的架构之后,很多问题迎刃而解,甚至解决一些别的问题也游刃有余。So,链表虽然非常重要,但真的没有辣么难。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章