链表剔除求教,自己写的代码,劳驾各位前辈看看哪里出错了
链表删除求教,自己写的代码,劳驾各位前辈看看哪里出错了
要求就是输入学生成绩列表,然后输出,再输入要删除的学生学号,然后删除该学生学号及成绩,再输出链表内容,编译链接都没问题,输入要删除的学号后,就出现问题了。。。麻烦各位给指点指点,多谢
PS:我没有按视频上面的来,完全是靠自己的想象写出来的~求各位大侠指点哈
------解决方案--------------------
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
struct stu *creat();
void print(struct stu *q);
struct stu *del(struct stu *d);
struct stu
{
int num;
float score;
struct stu *next;
};
int n;
void main()
{
struct stu *p,*p1;
p=creat();
printf("学生的学号和成绩如下:\n");
print(p);
p1=del(p);
print(p1);
system("pause");
}
struct stu *creat(struct stu *head)
{
struct stu *p1,*p2;
n=0;
head=NULL;
p1=p2=(struct stu *)malloc(sizeof(struct stu));
printf("请输入学生学号:\n");
scanf("%d",&p1->num);
printf("请输入该生成绩:\n");
scanf("%f",&p1->score);
while(p1->num)
{
n++;
if(n==1) head=p1;
p1=(struct stu *)malloc(sizeof(struct stu));
printf("请输入学生学号:\n");
scanf("%d",&p1->num);
printf("请输入该生成绩:\n");
scanf("%f",&p1->score);
p2->next=p1;
p2=p1;
if(p1->num==0) p2->next=NULL;
}
return head;
}
void print(struct stu *q)
{
struct stu *q1;
q1=q;
if(q!=NULL)
{
do
{
printf("学号:%d\t成绩:%.2f\t\n",q1->num,q1->score);
q1=q1->next;
}while(q1->next!=NULL);
}
}
struct stu *del(struct stu *d)
{
struct stu *d1,*d2;
int num;
d1=d;
printf("请输入要删除的学生的学号:\n");
scanf("%d",&num);
if(d!=NULL)
{
do
{
if(num!=d1->num) d1=d1->next;
else
{
d2=d1;
d1=d1->next;
d2->next=d1;
}
}while(d2->next==d1);
}
return d;
}
要求就是输入学生成绩列表,然后输出,再输入要删除的学生学号,然后删除该学生学号及成绩,再输出链表内容,编译链接都没问题,输入要删除的学号后,就出现问题了。。。麻烦各位给指点指点,多谢
PS:我没有按视频上面的来,完全是靠自己的想象写出来的~求各位大侠指点哈
------解决方案--------------------
struct stu *del(struct stu *d)
{
struct stu *d1,*d2;
int num;
d1=d;
printf("请输入要删除的学生的学号:\n");
scanf("%d",&num);
if(d!=NULL)
{
do
{
if(num!=d1->num) d1=d1->next;
else
{
d2=d1;
d1=d1->next;
d2->next=d1;
}
}while(d2->next==d1);//d2没有初值,如果num!=d1->num成立 判断d2->next==d1时就产生错误了
}