在我们实现初始化、头插、尾插、头删、尾删要先做哪些工作呢?
首先我们要vim 两个文件Linklist.h Linklist.c。
在h文件中写入函数名、结构体等,真正实现的代码在c文件中实现。
1.创建节点的结构体
typedef char LinkNodeType;
5 typedef struct LinkNode
6 {
7 LinkNodeType data;
8 struct LinkNode* next;
9 }LinkNode;
我们编写的是字符型链表,所以节点的结构体中有一个字符型数据,和指向下一个节点的结构体指针。
用一个宏来代替char, 将来方便我们修改与维护。
2.链表初始化
5 void LinklistInit(LinkNode** head)
6 {
7 *head = NULL;
8 }
头指针置为空就行了,该链表为一个空链表。
3.创建节点
17 LinkNode* CreatNode(LinkNodeType value)
18 {
19 LinkNode*new_node = (LinkNode*)malloc(sizeof(LinkNode));
20 new_node -> data = value;
21 new_node -> next = NULL;
22 return new_node;
23 }
创建一个节点,首先要申请空间,申请的大小为整个节点结构体,再将其强转成结构体指针类型。
分别把结构体内的数据、下一个节点的结构体指针设置好,返回new_node这个节点的地址,我们的节点就创建好啦。
4.删除节点
11 void DestroyNode(LinkNode* node)
12 {
13 free(node);
14 }
我们申请节点的时候是用malloc申请的,所以当你删除时需要用free进行释放内存,否则会出现内存泄漏的情况。这里我们为什么要用一个函数来封装这一个语句呢?首先,代码逻辑结构紧密,整体具有建筑美。其次,将来我们修改或维护时,只需要对其函数进行修改就可以了,比较方便。
5.