【发布时间】:2018-08-30 13:25:08
【问题描述】:
C中的这个过程应该根据它的数据删除链表的一个元素,但是每次调用它都会卡住。我可以确认问题不在于声明列表的类型或相关内容。
void supprime(list *head, int data2) {//failed
//data2 refers to the value we are looking for
list p= *head, k;
if (*head== NULL)
printf("the list is empty");
else {
while ((p->data!= data2) && (!p)) {
k= p;
p= p->next;
}
if (p->data == data2) {
k->next= p->next;
free(p);
}
else
printf("This data is not available\n");
}
}
如果有人想要entire source code,只是为了确保一切正常。
【问题讨论】:
-
请显示minimal reproducible example。特别是你需要展示你如何调用
supprime。 -
while ((p->data!= data2) && (!p)) {你应该把它们颠倒过来。 -
还有很多其他可能的问题,比如在删除第一个节点时取消引用
kuninitialized。 -
@JohnnyMopp 是的,如果 p 是
NULL,我们需要先检查一下,然后再访问p->data -
@ryyker 低素质的程序员发明了像 data3 这样的名字,然后发明了使用它们的理由。参数可以像数据一样命名。
标签: c list linked-list singly-linked-list