数据结构链表删除、查找等等

#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;

}

删除函数有点问题,修改如下,供参考:

status ListDelete_L(LinkList L, ElemType e) {
    LinkList pre = L, p = L->next;
    while (p && p->data != e) {
        pre = p;
        p = p->next;
    }
    if (p) {   //修改
        pre->next = p->next;
        e = p->data;
        free(p);
    }
    else
        return ERROR;  //修改
    return OK;
}