在运行过程中会出现段错误,这是我的代码
Pstu DeleteNode(char * name) │
{ │
Pstu Pn = Phead; │
Pstu Pm = Pn; │
int flag = 1; │
│
if(Pn == Pend) │
{ │
│
if(Pn == NULL) │
{ │
printf("you need to add some student first!"); │
return NULL; │
} │
else if(!strcmp(Pn->name,Pn->name)) │
{ │
printf("only1 and get it!"); │
│
return Pn; │
} │
} │
else if(Pn->next == Pend) │
free(Pn); │
else │
{ │
while(Pn != Pend ) │
{ │
if(!strcmp(Pn->name,name)) │
{ │
if(flag == 1) │
{ free(Pn); │
break; │
} │
else │
{ │
free(Pn); │
Pn = Pn->next; │
Pm->next = Pn; │
printf("infindwhile get it"); │
return Pm; │
} │
│
} │
else if(flag == 0)
{ │
Pm = Pn; │
Pn = Pn->next; │
Pm->next = Pn; │
} │
else │
{ │
flag = 0; │
Pn = Pn->next; │
│
Pm->next = Pn; │
} │
} │
if(!strcmp(Pn->name,name)) │
{ │
free(Pn); │
printf("finally delete it"); │
printf("%d\n",Pn->score); │
return Pm; │
} │
else │
printf("no one\n"); │
}
1条答案
按热度按时间yzuktlbb1#
考虑到你的实现对于一个节点删除函数来说似乎太大了(应该需要大约10行),这里有一些你应该关心的建议: