单链表组成:头指针+头结点+第一个结点+第二个结点+第三个结点………….第N个结点。
注意下图中:首元结点就是第一个结点。
头指针:作用:1.头指针的名字就是本链表的名字 2.头指针也是一个指针,存放头节点地址
头结点:作用:1.规定当头节点的指针域为空,则本链表为空。
首元结点:就是本链表的第一个结点(真正存放数据的第一个结点)
结点:构成1.数据域 2.指针域(结点指针指向下一个/上一个结点地址,而不是本结点地址!!本结点地址在上一个/下一个结点的指针域中!)
疑点:
1.为什么要有头指针?我直接弄个1号结点后接2号结点接3号结点不就好了?
答:内存中有很多很多链表,你怎么知道找哪一个?头指针就是定位要找的链表的。
2.为什么要有头结点?我直接头指针后接1号结点后接2号结点接3号结点不就好了?
答:当你要清空一个链表时,你把1234……结点清空了,就剩个头指针了,头指针好歹是个指针吧,它要是只剩自己而不指向一个地址那不就没有意义了吗?没有意义的东西在内存中会被自动清除掉,也就是当你把1234…..结点清空的时候也就是本链表泯灭的时候。
但是你只想删除链表中的1234….结点,链表保留,我以后还要再加东西呢,这时候咋办?都泯灭了。于是乎——为解决这个难题:头结点出现了,头节点中不存任何数据值,头结点作用:被头指针指/指向后面的1234…..结点。就算1234….被清空我也不泯灭,还有个头结点扛着,以后想加点啥就在头节点后加点啥。
3.图片中的红线啥意思?
红线是方便理解链表:头指针和头结点是规定的,永恒存在的,跟小区的保安一样,人就规定每个小区必须有保安,那链表就必须有头指针+头结点。
注意:本文的结点==节点(输入法有病)