基本上我必须从链表中删除某个项目。 此代码有效:
void delete_(Item client){
link s=head,r;
if(head->item==client){
r=head;
head=head->next;
free(r);
}
else{
while(s->next!=NULL){
if(s->next->item==client){
r=s->next;
s->next=s->next->next;
free(r);
}
else
s=s->next;
}
}
}
现在我尝试使用带有 2 个指针的 for 来减少和压缩代码,但我不知道如何让它工作。 这是代码:
void delete_(Item client){
link x,r,p;
for(x=head;x!=NULL;p=x,x=x->next){
if(x->item==client){
r=x;
p->next=x->next;
free(r);
}
}
}
最佳答案
有两点错误:
- 如果第一个元素是需要删除的项目,则该项目的前一个不存在,代码 p->next = ... 不是正确的操作。你应该改变列表的头部,这是正确的行为。
- 当你删除当前项目(free(r))时,所以如果你调用 x=x->next 你的程序可能会崩溃。删除之前必须备份 x->next。你的 for 循环需要改变
关于c - 从 C 中的列表中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33972616/