1 . 概念
头结点:在我看来,头结点其实是为了脱离整个数据链表,能轻易的找到首元结点、操作首元结点而设置的一个结点。
头指针:头指针是一个指针,指向的是头结点,也就意味着头指针里储存着头结点的地址。
首元结点:包含有数据的第一个结点。
2 . 区别
头结点:从上图看出,头结点的数据域里是没有数据的,它的指针域指向的是首元结点。
头指针:仅仅是一个指向头结点的指针,为了方便操作头结点。
DataType *L = (DataType*)malloc(sizeof(DataType)); // 其实在申请内存空间的时候,就声明了头指针,并初始化了第一个头结点。
首元结点:包含了数据的第一个结点,如上图所示的首元结点,就包含了“A”这个数据。
3 . 其他
· 头结点可以不需要,头指针必须留,因为头指针里可以存储头结点或者首元结点的地址,至少我们通过头指针可以找到他们俩任意一个。
· 在创建的时候,有的人喜欢将头结点一起创建,有的人喜欢不要头结点,其实都可以,并不妨碍程序的运行。
· 但:在某些时候,比如循环链表,双向循环链表里边需要对首元结点做操作的时候,不创建头结点,对于首元结点的操作,就有些麻烦了。