#include<stdio.h>
#include<stdlib.h>
#define ERROR 0
#define OK 1
typedef int status;
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode, *LinkList;
LinkList CreateList_L(int *a,int n){//创建
LinkList L,r,p;int i;
L=r=(LinkList )malloc(sizeof(LNode));
for(i=0;i<n;i++){
p=(LinkList)malloc(sizeof(LNode));
p->data=a[i];
r->next=p;
r=p;
printf(" ");
}
r->next=NULL;
return L;
}
LinkList LocateList_L(LinkList L,ElemType x){//查找
LinkList p=L->next;
while(p&&p->data!=x){
p=p->next;
}
if(!p) return ERROR;
return p;
}
status ListDelete_L(LinkList L,ElemType e){
LinkList pre=L,p=L->next;
while(p&&p->data!=e){
pre=p;
p=p->next;
}
pre->next=p->next;
e=p->data;
free(p);
return OK;
}
status ListInsert_L(LinkList L,ElemType e,int i){
LinkList p=L->next,s;
int j=0;
while(p&&j<i-1){
p=p->next;
++j;
}
if(!p||j>i-1) return ERROR;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
void show_L(LinkList L){
LinkList p=L->next;
while(p){
printf("%d ",p->data);
p=p->next;
}
}
int main(){
LinkList p,L;
int a[10],n,i,x;
printf("请输入链表的长度:");
scanf("%d",&n);
printf("请输入链表的数值:");
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
printf("\n");
L=CreateList_L(a,n);
show_L(L);
printf("\n");
printf("请输入要查找的数:");
scanf("%d",&i);
p=LocateList_L(L,i);
if(!p){
printf("Not found\n");
}
else printf("found\n");
printf("请输入要删除的数:");
scanf("%d",&x);
if(!ListDelete_L(L,x))
printf("not found\n");
else {
printf("删除成功");
show_L(L);
printf("\n");
}
printf("请输入要插入的位置:");
scanf("%d",&i);
printf("\n");
printf("请输入要插入的值:");
scanf("%d",&x);
printf("\n");
if(!ListInsert_L(L,x,i))
printf("not found");
else{
printf("插入成功");
show_L(L);
}
return 0;
}