从链接列表中删除节点(C)

时间:2017-05-21 16:01:53

标签: c data-structures linked-list

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->接下来指向。

1 个答案:

答案 0 :(得分:0)

如果目标数据不在根节点上,则转到第一个while次迭代,然后使用prev->next = ptr;到达其他地方,但prev仍为NULL } --->程序崩溃。

只需使用调试器 - 您就会很快发现此错误。