带结点与不带结点用头插法和尾插法创建单链表
一、采用带有头结点的头插法逆向建立单链表
Linklist List_HeadInsert1(LinkList &L) //采用带有头结点的头插法逆向建立单链表
{
LNode *s; //声明一个临时结点
int x;
L=(LinkList)malloc(sizeof(LNode)); //创建头结点
L->next=NULL; //初始为空链表
scanf("%d",&x); //输入结点的值
while(x!=9999)
{
s=(LNode*)malloc(sizeof(LNode)); //创建新结点
s->data=x;
s->next=L->next; //将新结点插入表中,L为头指针
L->next=s;
scanf("%d",&x);
}
return L;
}
二、采用不带有头结点的头插法逆向建立单链表
Linklist List_HeadInsert2(LinkList &L) //采用不带有头结点的头插法逆向建立单链表
{
LNode *s; //声明一个临时结点
int x;
L=NULL;
scanf("%d",&x); //输入结点的值
while(x!=9999)
{
s=(LNode*)malloc(sizeof(LNode)); //创建新结点
s->data=x;
if(L==NULL) // 若第一次创建节点,则将该点设置为头节点
{
L=s;
s->next=NULL;
}
else{ // 若不是第一次创建节点,则直接将新节点接到链表头
s->next=L;
L=s;
}
scanf("%d",&x);
}
return L;
}
三、采用带有头结点的尾插法正向建立单链表
Linklist List_TailInsert1(LinkList &L) //采用带有头结点的尾插法正向建立单链表
{
LNode *s,*r; //s为临时结点,r为表尾指针
int x;
L=(LinkList)malloc(sizeof(LNode)); //创建头结点
L->next=NULL; //初始为空链表
r=L;
scanf("%d",&x); //输入结点的值
while(x!=9999)
{
s=(LNode*)malloc(sizeof(LNode)); //创建新结点
s->data=x;
r->next=s;
r=s; //r指向新的表尾结点
scanf("%d",&x);
}
r->next=NULL; //尾结点指针为空
return L;
}
四、用不带有头结点的尾插法正向建立单链表
Linklist List_TailInsert2(LinkList &L) //采用不带有头结点的尾插法正向建立单链表
{
LNode *s,*r; //s为临时结点,r为表尾指针
int x;
L=NULL;
r=L;
scanf("%d",&x); //输入结点的值
while(x!=9999)
{
s=(LNode*)malloc(sizeof(LNode)); //创建新结点
s->data=x;
if(L==NULL) // 创建链表的第一个节点
{
L=s;
r=s;
s->next=NULL;
}
else{
r->next=s;
r=s;
}
scanf("%d",&x);
}
r->next=NULL; //尾结点指针为空
return L;
}