我在之前一篇博客《C语言实现单链表(不带头结点)的基本操作》中具体实现了不带头结点的单链表的11种操作:如计算链表长度、初始化、创建链表、清空链表等等。但是在实际使用中,带头结点的单链表往往比不带头结点的单链表用的更多,使用也更为方便。因为不用单独考虑第一个节点的情况了,第一个节点和其他后续节点的处理全都一样了,简化操作。这篇博客将会来实现带头结点的单链表的11种操作。代码上传至: https://github.com/chenyufeng1991/LinkedList_HeadNode 。
(1)定义带头结点单链表的节点类型
typedef int elemType;
typedef struct NodeList{
int element;
struct NodeList *next;
}Node;
(2)初始化带头结点的单链表【这个很关键】
//1.初始化带头结点的单链表
void InitialList(Node **pNode){
//个人建议每一次malloc分配内存空间后,都要进行判断分配是否成功,也即判断是否为空;
//此时的这个pNode就是一个头结点;
//初始化成功后,其实相当于是一个正常的链表了;
*pNode = (Node *)malloc(sizeof(Node));
if (*pNode == NULL) {
printf("%s函数执行,内存分配失败,初始化单链表失败",__FUNCTION__);
}else{
(*pNode)->next = NULL;
printf("%s函数执行,带头结点的单链表初始化完成\n",__FUNCTION__);
}
}
(3)尾插法创建带头结点的单链表