不带头结点
#include<stdio.h>
typedef struct LNode { //定义单链表结构
int data; //每个节点存放一个数据
struct LNode *next; //指针指向下一个节点
}LNode, *LinkList;
bool InitList(LinkList &L);
bool Empty(LinkList L);
int main(void) {
LinkList L;
InitList(L);
if (Empty(L)) {
printf("链表为空!");
}
return 0;
}
//初始化空的单链表
bool InitList(LinkList &L) {
L = NULL; //空表,暂时没有任何节点
return true;
}
//判断单链表是否为空
bool Empty(LinkList L) {
return (L==NULL);
}
注意事项
(一)不带头结点只要判断头指针是否为空就能判断链表是否为空
(二)初始化链表之前需要将头指针置空
带头结点
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode { //定义单链表结构
int data; //每个节点存放一个数据
struct LNode *next; //指针指向下一个节点
}LNode, *LinkList;
bool InitList(LinkList &L);
bool Empty(LinkList L);
int main(void) {
LinkList L;
InitList(L);
if (Empty(L)) {
printf("链表为空!");
}
return 0;
}
//初始化空的单链表
bool InitList(LinkList &L) {
L = (LNode *)malloc(sizeof(LNode)); //分配头结点
if (L == NULL) { //内存不足,分配失败
return false;
}
L->next = NULL; //头结点之后暂时没有节点
return true;
}
//判断单链表是否为空(带头结点)
bool Empty(LinkList L) {
if (L->next == NULL) {
return true;
} else {
return false;
}
}
注意事项
(一)头结点并不存储数据,是为了之后的操作
(二)判断链表是否为空,判断的是头结点之后的节点是否为空