这篇博客作为我的第一篇博客是为了督促我自己能认真点学习数据结构,其中的代码是学习了一位B站up主的,以下代码仅供参考。
带头结点的单链表,数据元素是整数(1)
使用到的头文件
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
创建结构体,初始化链表
typedef int ElemType;//自定义链表元素为整数
typedef struct LNode
{
ElemType data; //存放结点的数据元素
struct LNode* next;//指向下一个结点的指针
}LNode,*LinkList;
//初始化链表LL,失败返回NIULL,成功返回头结点的地址。
LNode* InitList1();
//初始化链表LL,失败返回NIULL,成功返回头结点的地址。
LNode* InitList1()
{
LNode* head = (LNode*)malloc(sizeof(LNode));//分配头节点
if (head == NULL) return NULL;//内存不足,返回失败NULL
head->next = NULL;//头结点的下一结点暂时不存在,置空NULL
return head;
}
实现销毁、清空链表的操作
//销毁链表
void DestroyList1(LinkList LL);
//清空链表
void ClearList(LinkList LL);
销毁链表
//销毁链表
void DestroyList1(LinkList LL)
{
//销毁链表是值释放链表的全部结点,包括头结点
LNode* tmp;
while (LL != NULL)
{
tmp = LL->next;//tmp保存下一结点的地址
free(LL);//释放当前结点
LL = tmp;//LL指针移动到下一结点
}
return;
}
清空链表
void ClearList(LinkList LL)
{
//清空链表是指释放链表的全部结点,但不包括头节点
if (LL == NULL) {
printf("链表LL不存在。\n"); return;
}//判断链表是否存在
LNode* tmp1;
LNode* tmp2 = LL->next;//保留头结点,从头结点的下一结点开始释放
while (tmp2 != NULL) {
tmp1 = tmp2->next;
free(tmp2);
tmp2 = tmp1;
}
LL->next = NULL;//这行代码一定不能少否则会留下野指针
return;
}