【问题标题】:delete node from linked list fails从链表中删除节点失败
【发布时间】:2013-12-16 14:32:43
【问题描述】:

我正在学习 C,我尝试制作自己的函数,该函数将从列表中删除给定节点。我有我的结构:

typedef struct list
{
   int value;
   struct list *next;
} node;

然后我创建节点 {1} {2} {3} {4},myList_ptr 是指向第一个节点的指针,然后我编码:

deletevalue(myList_ptr, 3);

在哪里

void deletevalue(node *ptr, int value)
{
    node *temp = ptr;

    if(temp->value == value)
    {
        ptr = ptr->next;
    }
    else
    {
        while(temp->next->value != value)
        {
            temp = temp->next;
        }

        temp->next = temp->next->next;
    }
}

如果我运行上述命令并再次打印列表,我将得到 {1} {2} {4}。但是,如果我运行此命令 deletevalue(myList_ptr, 1); 我的第一个节点不会被删除。

注意事项

  • 我知道,如果我将一个不存在的节点作为参数,我的程序就会中断。
  • 另外,我知道我实际上并没有删除节点,而只是隐藏了它。

要打印我编写的列表:

void printlist(node *ptr)
{
    node *temp = ptr;

    printf("Print3 the list: [");
    while(temp != NULL)
    {
        printf(" %d ",temp->value);
        temp = temp->next;
    }
    printf("]\n\n");
}

【问题讨论】:

    标签: c linked-list


    【解决方案1】:

    您永远不会更新传递给deletevalue() 的原始指针。更改后,您应该返回新值。

    node* deletevalue(node *ptr, int value)
    

    并称它为:

    mylist = deletevalue(myList_ptr, 3);
    

    【讨论】:

    • 另外,不要忘记free()分配给被删除节点的内存。
    • @anishsane OP 提到了这一点。
    • 哦对不起...我错过了。
    猜你喜欢
    • 2013-01-08
    • 2017-10-21
    • 2013-08-30
    • 2020-02-04
    • 2019-05-10
    相关资源
    最近更新 更多