头插法:
该方法从空表开始,生成新的结点,并将读取到的数据存放在新结点的数据域中,然后将新结点插入到当前链表的表头,即头结点之后。
下面展示代码
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode , *LinkList;
LinkList List_HeadInsert(LinkList &L){
LNode * s; int x;
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
scanf("%d",&x);
while (x!= 9999){
s = (LinkList)malloc(sizeof(LNode));
s->data = x;
s->next = L->next;
L->next = s; //将新节点插入表中。
scanf("%d",&x);
}
return L;
}
int main(){
LinkList L;
L=List_HeadInsert(L);
while(L->next!=NULL){
printf("%d",L->next->data);
L=L->next;
}
}
尾插法:
头插法建立单链表的算法虽然简单,单生成的链表中的结点的次序和输入数据的顺序不一样,若希望两者次序一样,可采用尾插法。该方法将新的结点插入到当前链表的表尾,为此必须增加一个尾指针r,使其始终为链表的尾结点。
下面展示代码
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode{ //定义结点类型
int data; //数据域
struct LNode *next; //指针域
}LNode , *LinkList;
LinkList List_TailInsert(LinkList &L){ //尾插法
int x; //设置元素类型为整型
L = (LinkList)malloc(sizeof(LNode));
LNode *s,*r =L; //r为表尾指针
scanf("%d",&x); //输入节点值
while(x!=9999){
s = (LinkList)malloc(sizeof(LNode));
s->data = x;
r->next = s;
r = s; //r指向表尾结点。
scanf("%d",&x);
}
r->next= NULL; // 表尾置空。
return L;
}
int main(){
LinkList L;
L = List_TailInsert(L);
while(L->next!=NULL){ //循环打印链表数据
printf("%d",L->next->data);
L= L->next;
}
}
一年短暂又关键,come on。