谁帮我查一下这个c程序的错误

来源:百度知道 编辑:UC知道 时间:2024/06/01 16:07:58
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

typedef struct _lnode
{
int data;
struct _lnode *next;
}Lnode;

//function declaration
Lnode *list_insert(Lnode *first,Lnode *p,int e);
Lnode *list_find(Lnode *first,int e);
Lnode *list_delete(Lnode *first,int key);
Lnode *list_create(Lnode *first,int a[],int n);
void list_destroy(Lnode *first);
void list_print(Lnode *first);

int main()
{
int n,a[]={12,34,21,11,56,54,65};
Lnode *first=0,*p=0;
first=list_create(first,a,7);
list_print(first);
first=list_insert(first,first,100);
list_print(first);
p=list_find(first,11);
list_insert(first,p,200);
list_print(first);

p=list_delete(first,54);
free(p);
list_print(first);
list_destroy(first);

system("pause");
return 0;
}

Lnode *list_insert(Lnod

list_insert()函数修改如下:

Lnode *list_insert(Lnode *first,Lnode *p,int e)
{
Lnode *q,*s;
s=(Lnode *)malloc(sizeof(Lnode));
assert(s!=0);
s->data=e;
s->next=0;

if(first==NULL)
{
first=s;
return first;
}

if(p==first)
{
s->next=first;
first=s;
}
else{
q=first;/*********注意这里********/
while(q->next!=p)
q=q->next;
q->next=s;
s->next=p;
}
//free(s);
return first;
}

Lnode *list_insert(Lnode *first,Lnode *p,int e)
{
...
while(q->next!=p)
...
}
q已经空了,无法再用,于是弹框了