删除链表,有问题,求指导
哪里错了,要注意什么?什么思想?
程序代码:/*
学生信息删除函数,删除指定学号的学生信息,
传递给该函数的实参是所建立的单链表的头指针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;
}










新人哈...