一、概念
頭結點:是虛擬出來的一個節點,不保存數據。頭結點的next指針指向鏈表中的第一個節點。對於頭結點,數據域可以不存儲任何信息,也可存儲如鏈表長度等附加信息。頭結點不是鏈表所必需的。
頭指針:是指向第一個結點的指針,如果鏈表沒有引入頭結點,那麼頭指針指向的是鏈表的第一個結點。頭指針是鏈表所必需的。
[注意]無論是否有頭結點,頭指針始終指向鏈表的第一個結點。如果有頭結點,頭指針就指向頭結點。
二、爲何引入頭結點
1)對鏈表的刪除、插入操作時,第一個結點的操作更方便
如果鏈表沒有頭結點,那麼頭指針指向的是鏈表的第一個結點,當在第一個結點前插入一個節點時,那麼頭指針要相應指向新插入的結點,把第一個結點刪除時,頭指針的指向也要更新。也就是說如果沒有頭結點,我們需要維護着頭指針的指向更新。因爲頭指針指向的是鏈表的第一個結點,如果引入頭結點的話,那麼頭結點的next始終都是鏈表的第一個結點。
帶頭結點的單鏈表
不帶頭結點的單鏈表
引入頭結點後,頭指針指向頭結點,那麼無論鏈表是否爲空,頭指針均不爲空。
2)統一空表和非空表的處理
有了頭結點之後頭指針指向頭結點,不論鏈表是否爲空,頭指針總是非空,而且頭結點的設置使得對鏈表的第一個位置上的操作與在表中其它位置上的操作一致,即統一空表和非空表的處理。