c++ - 从链表中删除一个值/删除不是动态分配的值

标签 c++ linked-list dynamic-memory-allocation

我的教科书有以下用于从链表中删除元素的代码。

void remove(double num)
{
    Node *cur, *prev;
    if(!head){
        return;
    }
    if(head->data == num)
    {
        cur = head;
        head = head->next;
        delete cur;
    }
    else{
        cur = head;
        while(cur!=NULL && cur->data != num)
        {
            prev = cur;
            cur= cur->next;
        }
        if(cur)
        {
            prev->next = cur->next;
            delete cur;
        }
    }
}

我有几个关于这段代码的问题。首先,如何删除不是动态分配的值?为什么这是必要的?我在任何地方都没有看到新声明。其次,为什么需要这段代码?为什么它需要在 if 语句中?

if(cur)
        {
            prev->next = cur->next;
            delete cur;
        }

最佳答案

首先,此代码假定节点是动态分配的。这就是通常构造链表的方式。如果您的代码使用堆栈上的节点,则只需删除 delete 语句。 (并考虑一下您将如何跟踪正在使用的节点。)

其次,该代码块是必需的,因为它删除了要删除的节点——如果该节点存在的话。它位于 if block 中,以防节点不存在。在纸上画一个简单的示例,然后逐步执行代码,看看如果您尝试删除不在列表中的元素会发生什么。

关于c++ - 从链表中删除一个值/删除不是动态分配的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45517195/

相关文章:

c - 从另一个函数调用构造函数时的存储持续时间

c - 为什么在这个程序中运行时错误取决于输入的值?

c++ - C++中的函数模板?

c++ - 像 Photoshop CS 一样管理窗口 Z 顺序

C,代码 :Block, 另一个 sigsegv,列出

c - C 链表中的冒泡排序

c - C中的单链表程序 - 段错误错误

c++ - 如何有效地衡量运行时的差异

c++ - 不存在从 std string 到 const char * 的合适转换函数

C++ 分配 vector 所花费的时间