结构之美:单链表的头结点与头指针
当链表的每个结点只包含一个指针域时,我们称此链表为单链表。 关于单链表的存取,有时候我们在单链表的第一个结点(有效元素)之前附设一个结点,称之为 头结点 ;指向头结点的指针,称之为头指针;对单链表的存取必须从头指针开始进行,由于单链表的最后一个数据元素没有直接后继,则指针为NULL。 对于头结点,数据域可以不存储任何信息,也可存储如链表长度等附加信息。 下面是带头结点的单链表与空表的比较图。 头指针与头结点不同,头结点即第一个结点, 头指针 是指向第一个结点的指针。链表中可以没有头结点,但不能没有头指针。 以下是头指针与头结点的关系: //定义结点的结构体 typedef struct LNode{ int data; struct LNode *next; }LNode,*LinkList; 则定义LinkList L;时,L为链表的头指针。 L=(LinkList) malloc (sizeof(LNode)); //创建一个结点 此处返回给L的是一个指针,并且赋给了头指针。 L->next=null; //这里说明我创建了一个头结点,即同时运用了头指针和头结点。 小结 关于头指针: 在线性表的链式存储结构中,头指针是指链表指向第一个结点的指针,若链表有头结点,则头指针就是指向链表头结点的指针。 头指针具有标识作用,故常用头指针冠以链表的名字。 无论链表是否为空,头指针均不为空