【问题标题】:Deleting Nodes from a Linked List (C)从链表中删除节点 (C)
【发布时间】:2017-10-21 06:57:07
【问题描述】:
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 指向。

【问题讨论】:

  • 调试器.......................
  • root = root->next; 是内存泄漏,因为您刚刚丢失了对root 指向的内存块的引用。 (您需要free 节点数据(如果已分配),然后是节点(如果这确实是一个链表,则应该分配)。

标签: c data-structures linked-list


【解决方案1】:

如果目标数据不在根节点上,则进行第一次while 迭代,然后使用prev->next = ptr; 到达else,但prev 仍然是NULL ---> 程序崩溃。

只需使用调试器 - 你会很快发现这个错误。

【讨论】:

  • 我有一个涵盖该条件的 if 语句,甚至在进入 while 之前都会对其进行检查。
  • 更新了我的答案。
猜你喜欢
  • 2013-08-30
  • 2019-05-10
  • 1970-01-01
  • 2021-02-21
  • 1970-01-01
  • 2019-05-10
  • 2021-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多