定义单链表中的结点类型
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
头插法(带头结点)
LinkList List_HL_HeadInsert(LinkList &L){
L=(LinkList)malloc(sizeof(LNode));
int x;
LNode *s;
L->next=NULL;
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;
}
头插法(不带头结点)
LinkList List_NL_HeadInsert(LinkList &L){
L=(LinkList)malloc(sizeof(LNode));
int x;
LNode *s;
scanf("%d",&x);
L->data=x;
L->next=NULL;
while(x!=9999){
s=(LNode*)malloc(sizeof(LNode));
scanf("%d",&x);
s->data=x;
s->next=L;
L=s;
}
return L;
}
头插法可用于链表的逆置
尾插法(带头结点)
LinkList List_HL_TailInsert(LinkList &L){
L=(LinkList)malloc(sizeof(LNode));
int x;
LNode *s,*r=L;//r为表尾指针
scanf("%d",&x);
while(x!=9999){
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=NULL;
return L;
}
尾插法(不带头结点)
LinkList List_NL_TailInsert(LinkList &L){
L=(LinkList)malloc(sizeof(LNode));
int x;
scanf("%d",&x);
L->data=x;
L->next=NULL;
LNode *s,*r=L;
while(x!=9999){
s=(LNode*)malloc(sizeof(LNode));
scanf("%d",&x);
s->data=x;
r->next=s;
r=s;
}
r->next=NULL;
return L;
}