暢談鏈表---初級篇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,鏈表雖然非常重要,但真的沒有辣麼難。

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