gpt4 book ai didi

c++ - 为什么在实现链接列表时 "delete at head"不能正常工作?

转载 作者:行者123 更新时间:2023-11-28 04:18:53 27 4
gpt4 key购买 nike

我执行以下代码来删除 Head 处的元素。当程序运行到“delete p”时,会影响之前的Head,Head gets to NULL。发生了什么事?

    Node<T>* p;
p = Head;
Head = Head->next;
delete p;

最佳答案

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

这里对输入参数(head)使用双指针,因为head会必须更新,这个值应该反射(reflect)在这个函数之外。

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,delete 会小心处理。

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

关于c++ - 为什么在实现链接列表时 "delete at head"不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55914339/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com