为什么要设置链表头结点?

<整理资料>
Q:什么是头结点?
A:数据结构中,在单链表的开始结点之前附设一个类型相同的结点,称之为头结点。头结点的数据域可以不存储任何信息,头结点的指针域存储指向开始结点的指针(即第一个元素结点的存储位置)。
A:头结点其实就是一个数据域为空的结点(当然也可储存链表的长度之类的数据,一般对链表操作无影响),而首元结点就是第一个元素结点,即头结点后边的第一个结点。

Q:用来干嘛?
A:
1、防止单链表是空的而设的。当链表为空的时候,带头结点的头指针就指向头结点。如果当链表为空的时候,单链表没有带头结点,那么它的头指针就为NULL。
2、在第一个元素结点前插入结点(或删除第一个结点),使其操作与对其它结点一致。带头结点时,不论删除哪个位置上的结点,用到的代码都一样;不带头结点时,删除第1个元素和删除其它位置上的元素用到的代码不同,相对比较麻烦。
此处网友解释清楚:https://www.cnblogs.com/cs-lcy/p/7045303.html
3、头结点的存在使得空链表与非空链表的处理操作一致。单链表加上头结点之后,无论单链表是否为空,头指针始终指向头结点,因此空表和非空表的处理也统一了。
4、对单链表的多数操作应明确对哪个结点以及该结点的前驱。不带头结点的链表对首元结点、中间结点分别处理等;而带头结点的链表因为有头结点,首元结点、中间结点的操作相同 ,从而减少分支,使算法变得简单 ,流程清晰。对单链表进行插入、删除操作时,如果在首元结点之前插入或删除的是首元结点,不带头结点的单链表需改变头指针的值,在C 算法的函数形参表中头指针一般使用指针的指针(在C+ +中使用引用 &);而带头结点的单链表不需改变头指针的值,函数参数表中头结点使用指针变量即可。
感谢:https://blog.csdn.net/leo115/article/details/8602621

猜你喜欢

转载自blog.csdn.net/lzydadong/article/details/83212175
今日推荐