0.定义结点
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode, *LinkList;
//LNode表示节点,LinkList表示头指针
1.初始化
①带头结点
bool InitList(LinkList &L){
L = (LNode *)malloc(sizeof(LNode));//头指针指向头结点
//判断是否分配成功
if(L == NULL)
return false;
//初始化指向空
L ->next = NULL;
return true;
}
②不带头结点
bool InitList(LinkList &L){
L = NULL;//初始化为空表,头指针指向空
return true;
}
2.判空
①带头结点
bool Empty(LinkList L) {
if(L->next == NULL)
return true;
else
return false;
}
②不带头结点
bool Empty(LinkList L) {
if(L == NULL)
return true;
else
return false;
}
3.创建
3.1头插法(常应用于链表逆置)
①带头结点
LinkList List_HeadInsert(LinkList &L) {
InitList(L);//初始化:创建头结点;初始化为空链表
LNode *s;
int x;
scanf("%d", &x);
while(x != 9999) {
//输入9999表示结束
s = (LNode*)malloc(sizeof(LNode));
s -> data = x;
s -> next = L -> next;
L -> next = s;
scanf("%d", &x);
}
return L;
}
②不带头结点
LinkList List_HeadInsert(LinkList &L) {
InitList(L);//初始化:初始化为空链表
LNode *s;
int x;
scanf("%d", &x);
while(x != 9999) {
//输入9999表示结束
s = (LNode*)malloc(sizeof(LNode));
s -> data = x;
s -> next = L;
L = s;
scanf("%d", &x);
}
return L;
}
每个结点插入的时间复杂度为:O(1)
总时间复杂度:O(n)
3.2尾插法
①带头结点
LinkList List_TailInsert(LinkList &am