0.建立单链表前的工作
#include<stdio.h>
#include<stdlib.h>
//定义结构体
typedef int Elemtype;
typedef struct LNode{
Elemtype data; //单链表结点中的数据域,用来存放数据
LNode *next; //单链表结点中的指针域,用来存放下一个结点的地址
}LNode,*Linklist;
1.头插法建立单链表
Linklist Create_head(Linklist &L){
LNode *s; //定义s指针
int x; //用来保存数据
L=(LNode*)malloc(sizeof(LNode)); //向内存申请开辟一个LNode类型大小的内存空间,L作为头结点
L->next=NULL; //将头指针的next置空
scanf("%d",&x);
while(x!=999){ //若输入为999则结束输入
s=(Linklist)malloc(sizeof(LNode)); //向内存申请为s开辟一个LNode类型大小的内存空间
s->data=x; //将x的值赋值给s结点的数据域data
s->next=L->next; //s结点指向头结点的下一个结点
L->next=s; //再将头结点指向s结点
scanf("%d",&x); //再次输入数据
}
return L; //返回L的地址
}
主函数调用
int main(){
Linklist L; //定义一个LNode类型的变量L
Create_head(L); //头插法创建单链表
printlist(L); //打印输出
return 0;
}
运行示例
2.尾插法建立单链表
//尾插法建立单链表
Linklist Create_tail(Linklist& L) {
int x;
L = (Linklist)malloc(sizeof(LNode));
LNode*s,*r=L; //与头插法不同的是需要定义一个尾指针r,r始终指向单链表中最后一个结点
scanf("%d",&x);
while (x!=999)
{
s = (LNode*)malloc(sizeof(LNode));
s->data = x;
r->next=s; //当前的尾结点指向s
r = s; //将s的值传给r,目的是将s作为当前的尾结点
scanf("%d", &x);
}
r->next = NULL; //插入完成后将r->next置空
return L;
}
主函数调用
int main(){
Linklist L; //定义一个LNode类型的变量L
Create_tail(L); //尾插法创建单链表
printlist(L); //打印输出
return 0;
}
运行示例