使用头结点的好处
(1) 对带头结点的链表,在表的任何结点之前插入结点或删除表中任何结点,所要做的都是修改前一结点的指针域,因为任何元素结点都有前驱结点。若链表没有头结点,则首元素结点没有前驱结点,在其前插入结点或删除该结点时操作会复杂些。
(2) 对带头结点的链表,表头指针是指向头结点的非空指针,因此空表与非空表的处理是一样的。
(3)头结点还可以存放表长度等附加信息
分清楚:头指针,和头结点
在采用头结点的链表时,头指针指向头结点
头结点不计入链表长度
结点类型定义:
注意:
typedef struct node{
int a;
node* next;
}node,*linklist;
前面的node表示结构名,后面的node是对整个struct结构的一个缩写,是一种新定义名,是对现有类型名的补充
注意事项:
申请内存后,检查内存是否可用
释放内存后,用将被释放指针变成NULL
函数入口处检查变量assert
申请内存后,检查内存是否可用
释放内存后,用将被释放指针变成NULL
函数入口处检查变量assert