实现link-list时为什么不能“正确删除”工作?

问题描述 投票:0回答:1

我实现了以下代码来删除Head的元素。当程序符合“删除p”时,它将影响前一个Head和Head获得NULL。发生了什么?

    Node<T>* p;
    p = Head;
    Head = Head->next;
    delete p;
c++ list hyperlink
1个回答
1
投票

此函数将删除第一个节点(head指向的节点)。如果节点被删除则返回true,如果列表为空则返回false。

在这里使用双指针作为输入参数(head)因为head必须更新,并且该值应该反映在此函数之外。

bool deleteHeadElement(Node** head)  
{
    if (*head == nullptr)
    {
        // List is empty, nothing to delete
        return false;
    }

    // Store the node that has to be deleted
    Node* nodeToDelete = *head;

    // Update the head to point to next nodeToDelete
    *head = nodeToDelete->next;

    delete nodeToDelete;

    // 1st element of node has been deleted.
    return true;
}

在调用此函数之后,您可以随后调用它,它将处理在前一次调用之后列表变空的情况。

注意:关于值0xfeeefeee,似乎你试图以某种方式释放已经释放的内存。也许您应该检查您的头部是否正确更新。

此外,请确保仅在使用new分配时才使用delete来释放节点的内存。如果要指向的内存为NULL,则删除小心。

如果您使用malloc()为节点分配了内存,则应使用free()释放内存。

© www.soinside.com 2019 - 2024. All rights reserved.