完整的函数你可以找我要,现在只贴出一部分。
structstud
{charname[20];
intscore;
structstud*next;
};定义结构体
Student*DeleteSame(Student*head)
{Student*p,*temp,*deletelist[100];
inti=0,j,d;
p=head-next;
if(p==NULL)printf(\"NolistFound,pleaseCreatelist\\n\");
for(;p!=NULL;p=p-next)
for(temp=head;temp!=NULL;temp=temp-next)
{
if(strcmp(p-name,temp-name)==0)
{if(temp==p)gotoX;
elsedeletelist=p;break;
X:;
}
}
printf(\"Output:listofStudentswithasamename\\n\");
for(j=0;ji;j)
printf(\"%d.%s%d\\n\",j,deletelist[j]-name,deletelist[j]-score);
printf(\"%d.Cancledelete\\n\",i);
printf(\"pleasechooseonetodelete\\npleaseenterthenumber\\n\");
c5:fflush(stdin);
scanf(\"%d\",
if(d=0i)Delete(head,deletelist[d]);
elseif(d==i)gotoEnd;
else{printf(\"Wrongnumber,pleasere-enter\\n\");gotoc5;}
End:;
}我写的删除相同姓名的函数。
Student*Reverse(Student*head)
{Student*last,*p,*temp,*head_reverse;
head_reverse=(Student*)malloc(sizeof(Student));
for(last=head;last!=NULL;last=last-next);
head_reverse=last;
for(;head-next!=last;)
{for(p=head;p-next!=last;p=p-next);
last-next=p;
last=p;}
last-next=NULL;
printf(\"ReverseAccompanished...\\n\");
head=head_reverse;
returnhead;
}我写的借点逆序存放函数。
voidDisplay(Student*head)
{
Student*p;
inti;
p=head-next;
if(p!=NULL)
{printf(\"OutputList\\n\");
while(p!=NULL)
{i=0;
for(;i10;i)
{if(p==NULL)gotoEnd;
printf(\"%s\\t\\t%d\\n\",p-name,p-score);
p=p-next;}
system(\"pause\");}
End:printf(\"BottomOfTheList!\\n\");}
}这是显示函数。
这几个函数完全没有问题,运行结果完全正确。
问题是:当我运行一次结点逆序之后再运行删除相同姓名的函数就会什么也没有了。
特求大神解答!不胜感激!
|