#include<stdio.h>
#include<stdlib.h>
//定义单链表
typedef struct LNode{ //定义一个单链表
int data; //数据域
struct LNode *next; //指向下一个元素的指针
}LNode,*LinkList;
//初始化单链表
bool InitList(LinkList &L){
L=(LNode *)malloc(sizeof(LNode)); //分配头节点
if(L==NULL){ //内存不足
return false;
}
L->next=NULL;
return true;
}
//利用头插法建立一个单链表
LinkList List_HeadInsert(LinkList &L){
LNode *s; //指向新结点的指针
int x; //新结点的数据域
L=(LinkList)malloc(sizeof(LNode)); //创建头结点
L->next=NULL; //初始为空链表
scanf("%d",&x);
while(x!=9999){ //输入9999结束创建
s=(LNode *)malloc(sizeof(LNode)); //创建新结点
s->data=x;
s->next=L->next;
L->next=s;
scanf("%d",&x);
}
return L;
}
//利用尾插法建立一个单链表
LinkList List_TailInsert(LinkList &L){
int x; //新结点的数据域
L=(LinkList)malloc(sizeof(LNode)); //创建头结点
LNode *s;*r=L; //r为尾表指针
scanf("%d",&x);
while(x!=9999){ //输入9999结束创建
/*在r结点之后插入元素*/
s=(LNode *)malloc(sizeof(LNode)); //创建新结点
s->data=x;
r->next=s;
r=s; //r指向新的表尾结点
scanf("%d",&x);
}
return L;
}
//按序号查找结点值
LNode *GetElem(LinkList L,int i){
int j=1;
LNode *p=L->next; //把第一个结点的指针赋予p指针
if(i==0){
return L;
}
if(i<1){
return NULL;
}
while(p&&j<i){
p=p->next;
j++;
}
return p;
}
//按值查找表结点
LNode *LocateElem(LinkList L,int e){
LNode *p=L->next;
while(p!=NULL&&p->data!=e){
p=p->next;
}
return p;
}
int main(){
LinkList L;
InitList(L);
List_HeadInsert(L);
return 0;
}