我实现以下代码来删除Head上的元素。当程序运行到“删除p”时,它将影响先前的Head,并且Head变为NULL。发生什么事了?
Node<T>* p;
p = Head;
Head = Head->next;
delete p;
答案 0 :(得分:1)
此功能将删除第一个节点(node 头部指出)。如果删除了该节点,则返回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,则delete会小心。
如果您已经使用malloc()向节点分配了内存,则应该使用free()进行分配。