单向链表建立:插入头节点,尾部插入节点
参考连接:https://www.cnblogs.com/lanhaicode/p/10304567.html
#include <stdio.h>
#include <stdlib.h>
struct link *ListInit(struct link *head);
struct link *AppendNode(struct link *head,int din);
void DisplayList(struct link *head);
void DeletMemory(struct link *head);
struct link
{
int data;
struct link *next;
};
int main(void)
{
int i = 0;
struct link *head = NULL; //链表头指针
head = ListInit(head); //初始化链表头节点
while(i <= 4)
{
//向链表尾部添加节点,并返回头指针
head = AppendNode(head,i);
//显示链表各个节点
DisplayList(head);
printf("节点显示完毕\n\n");
i++;
}
DeletMemory(head);
return 0;
}
函数功能:初始化链表,新建一个空的头节点
返回值:结构体指针
struct link *ListInit(struct link *head)
{
struct link *p = NULL;
申请分配内存空间
p = (struct link *)malloc(sizeof(struct link));
if(NULL == p){
printf("内存空间不足,链表初始化失败\n");
exit(0);
}
head = p;
p->next = NULL;
return head;
}
函数功能:链表尾部添加节点
返回值:结构体指针
struct link *AppendNode(struct link *head,int din){
struct link *p = NULL;
struct link *pr = head;
int data = din;
p = (struct link *)malloc(sizeof(struct link));
if(NULL == p){
printf("内存空间不足\n");
exit(0);
}
if(NULL == head){ //链表为空
//新建节点设置为头节点
head = p;
}
else{
//移动头指针到链表尾部
while(NULL != (pr->next)){
pr = pr->next;
}
//新建节点添加到链表尾部
pr->next = p;
p->data = data;
p->next = NULL;
}
return head;
}
函数功能:打印链表各个节点
返回值:无
void DisplayList(struct link *head)
{
int i = 0;
struct link *p = head;
while(NULL != p){
printf("%d,%d\n\n",i,p->data);
p = p->next;
i++;
}
}
函数功能:释放链表存储空间
返回值:无
void DeletMemory(struct link *head)
{
struct link *p = head;
struct link *pr = NULL;
while(NULL != p){
pr = p; //保存当前节点指针
p = p->next;//下一个节点指针
free(pr);//释放当前节点内存
}
}