#include<stdio.h>
#include<stdlib.h>
#define ElemType int
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
//初始化单链表
bool InitLinkList(LinkList &L){
L=(LNode *)malloc(sizeof(LNode));
while(L==NULL){
return false;
}
L->next=NULL;
return true;
}
//判断链表是否为空
bool EmptyLinkList(LinkList &L){
if(L->next==NULL){
printf("空\n");
}
else
printf("非空");
return true;
}
//使用前插法给链表插入数据
bool HeadInsertLinkList(LinkList &L){
LNode *s;
int x;
scanf("%d",&x);
while(x!=9999){
s=(LNode *)malloc(sizeof(LNode));
s->data=x;
s->next=L->next;
L->next=s;
scanf("%d",&x);
}
return L;
}
//计算链表的长度
bool LengthLinkList(LinkList &L){
int i=0;LNode *p;
p=L;
while(p->next!=NULL){
p=p->next;
i++;
}
printf("\n链表长度为:%d\n",i);
return i;
}
//遍历链表并输出
void PrintLinkList(LinkList &L){
printf("链表如下:");
LNode *s;
s=L;
while(s->next!=NULL){
s=s->next;
printf("%d[%d]->",s->data,s->next);
}
if(s==NULL){
printf("链表为空,无法输出");
}
}
//按位序对链表进行插入
bool InsertLinkList(LinkList &L,int i,ElemType e){
if(i<1){
printf("输入的位序不合法");
return false;
}
LNode *p;
int j=0;
p=L;
while(p!=NULL&&j<i-1){
p=p->next;
j++;
}
if(p==NULL){
printf("无法在空链表中插入");
return false;
}
LNode *s=(LNode *)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
//指定节点之后插入元素
bool InsertNextNode(LinkList &L,LNode *p,ElemType e){
if(p==NULL)
return false;
LNode *s;
s=(LNode *)malloc(sizeof(LNode));
if(s==NULL)
return false;
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
//指定结点之前插入元素
bool InsertPriorNode(LinkList &L,LNode *p,ElemType e){
if(p==NULL)
return false;
LNode *s=(LNode *)malloc(sizeof(LNode));
if(s==NULL)
return false;
s->next=p->next;
p->next=s;
s->data=p->data;
p->data=e;
return true;
}
//主函数调用各函数
int main(){
LinkList L;
InitLinkList(L);
EmptyLinkList(L);
HeadInsertLinkList(L);
EmptyLinkList(L);
LengthLinkList(L);
PrintLinkList(L);
InsertLinkList(L,3,8);
LengthLinkList(L);
PrintLinkList(L);
InsertNextNode(L,L,10);
LengthLinkList(L);
PrintLinkList(L);
InsertPriorNode(L,L->next->next,20);
LengthLinkList(L);
PrintLinkList(L);
}
运行结果如下: