#include<stdio.h>
#include<stdlib.h>
typedef struct stu
{
int id;
char name[10];
int score;
struct stu* next;
}STU;
STU *creat();
STU *delete(STU* head,int minscore);
void print(STU* head);
int main()
{
int minscore;
STU* head=NULL;
head=creat();
scanf("%d",&minscore);
head=delete(head,minscore);
print(head);
}
STU* creat()
{
STU* head=NULL;
STU* pnew,*tail=NULL;
pnew=(STU*)malloc(sizeof(STU));
scanf("%d %s %d",&pnew->id,pnew->name,&pnew->score);
while(pnew->id!=0)
{
if(head==NULL)
{
head=pnew;
tail=pnew;
}
else
{
tail->next=pnew;
tail=pnew;
}
pnew=(STU*)malloc(sizeof(STU));
scanf("%d %s %d",&pnew->id,pnew->name,&pnew->score);
}
return head;//尾插法建立链表
}
STU* delete(STU* head,int minscore)
{
STU* p,*q;
int flag,count=0;//此时是大于指定成绩的头结点,不判断
while(head->score>minscore)
{
head=head->next;//找到大于指定成绩的结点,将它作为头节点
}
p=head;
q=head;
while(p!=NULL)
{
flag=1;//每轮都默认链表中的结点成绩大于指定成绩
if(p->score<minscore||count==0)
{
flag=0;
}
if(flag==1)//该节点的成绩大于指定成绩
{
q->next=p;
q=p;//连接链表
}
p=p->next;
}
return head;
}
void print(STU* head)
{
STU* p=head;
while(p!=NULL)
{
printf("%d %s %d",p->id,p->name,p->score);
p=p->next;
}
}
系统报的是段错误,可能是删除结点错误了?可以给出解答方案,谢谢。