删除链表,有问题,求指导
哪里错了,要注意什么?什么思想?程序代码:
/* 学生信息删除函数,删除指定学号的学生信息, 传递给该函数的实参是所建立的单链表的头指针L、要删除的学生学号。 若删除成功,返回值为1,否则,返回值为0。 */ #include<stdio.h> #include<stdlib.h> #define N 5 struct stud { int num; char name[10]; float score[N+1]; struct stud *next; }; struct stud *create(); int Delete(struct stud *head, int * per); void print(struct stud *head); //主函数 int main(void) { struct stud *L; int n, i; L=create(); printf("请输入要删除学生的学号:\n"); scanf("%d\n", &n); i=Delete(L, &n); printf("%d\n", i); return 0; } //创建链表头,这里也有运行错误 struct stud *create() { struct stud *head,*p1,*p2; int n=0, i; head = NULL; p2 = p1 = (struct stud*)malloc(sizeof(struct stud)); printf("请输入学号:\n"); scanf("%d",&p1->num ); printf("请输入姓名:\n"); scanf("%s", p1->name); if( p1->num == 0 ) { p2->next=NULL; return head; } printf("请输入学生5门成绩:\n"); for(i=0; i<5; i++) scanf("%f",&p1->score[i]); while(p1->num != 0) { n=n+1; if(n==1) head = p1; else p2->next = p1; p2 = p1; p1 = (struct stud*)malloc(sizeof(struct stud)); printf("请输入学号:\n"); scanf("%d",&p1->num); if( p1->num == 0 ) { p2->next=NULL; return head; } printf("请输入姓名:\n"); scanf("%s", p1->name); printf("请输入5门成绩:\n"); for(i=0; i<5; i++) scanf("%f",&p1->score[i]); } p2->next =NULL; return head; } //问题在这里开始 /* 学生信息删除函数,删除指定学号的学生信息, 传递给该函数的实参是所建立的单链表的头指针L、要删除的学生学号。 若删除成功,返回值为1,否则,返回值为0。 */ int Delete(struct stud *head, int * per) { int y; struct stud * p = head; struct stud * pa; if (head->next == NULL) { printf("链表为空!!!"); y=0; } else { while(*per != 0 && p->next!=NULL) { pa=p; p=p->next; } if(*per==0) { pa->next=p->next; y=1; free(p);//释放内存 } else { printf("未找到该数据!\n"); y=0; } } return y; }