void delete()
{
if(root == NULL)
{
printf("ERROR EMPTY LIST.\n");
}
else
{
printf("Enter value: ");
scanf("%d",&target);
if(root->data == target)
{
root = root->next;
}
else
{
struct node *ptr = root;
struct node *prev = NULL;
while(ptr != NULL)
{
if(ptr->data == target)
{
break;
}else
{
prev->next = ptr;
ptr = ptr->next;
}
}
prev->next = ptr->next;
}
}
}
程序在必须遍历链表时崩溃,我认为这与指针ptr和prev有关。我的逻辑是遍历列表,直到 ptr 遇到包含目标数据的节点。一旦它跳出循环并使 prev 指向 ptr->next 指向的节点。
最佳答案
如果目标数据不在根节点上,则转到第一个 while
迭代,然后使用 prev->next = ptr;
到达 else但 prev
仍然是 NULL
---> 程序崩溃。
只需使用调试器 - 您会很快发现此错误。
关于c - 从链表中删除节点(C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44098945/