根据定义:头指针是指向单链表的指针。但是既然添加了头结点,头结点也是结点啊,也有数据域和指针域(有没有值先不管),那么头结点的指针哪去了?不应该是头结点的指针指向首结点吗?(不知道这个结点叫什么,就先称呼为头结点的指针),那么这又该怎么解释呢?
头指针与头结点不同,头结点即第一个结点,头指针是指向第一个结点的指针。链表中可以没有头结点,但不能没有头指针。
这个头指针的意义在于,在访问链表时,总要知道链表存储在什么位置(从何处开始访问),由于链表的特性(next指针),知道了头指针,那么整个链表的元素都能够被访问,也就是说头指针是必须存在的。
扩展资料
引入头结点的优势
1、第1个位置的插入删除更加方便
若使用头结点,则第1个位置的插入和删除都是对p—>next进行操作,而不用动p本身,而且减少了算法分支(即if else分支)。
2、统一空表和非空表的处理
若使用头结点,无论表是否为空,头指针都指向头结点,也就是*LNode类型,对于空表和非空表的操作是一致的。
若不使用头结点,当表非空时,头指针指向第1个结点的地址,即*LNode类型,但是对于空表,头指针指向的是NULL,此时空表和非空表的操作是不一致的。
参考资料来源:
那你看我们课本上这是什么意思?head怎么一会是头指针怎么一会有事头结点了?
你这个是java吧,带泛型接口的,书上例子中定义并封装了单链表的类,并公开了Node类型的对象,该节点对象的地址赋值给了head,所以head就是Node的指针变量,外部程序可以直接访问,如果head中的节点指针指向类内部的链表,外部程序就可以访问所有链表节点。head本身就是指针,只是书上不是直接指向链表,而是new了一个头节点,用头节点的指针再指向链表表头,这种就看设计需要,不用太纠结。
而且你给的例子符合你主题中的那张图的设计,head是指针,指向头节点,就是new 创建的对象空间,head代表这个头节点,因此你可以将head看成头节点了,那么在创建链表后,必须将链表首地址赋值给head的节点指针。
本回答被提问者和网友采纳