我实现了以下代码来删除Head的元素。当程序符合“删除p”时,它将影响前一个Head和Head获得NULL。发生了什么?
Node<T>* p;
p = Head;
Head = Head->next;
delete p;
此函数将删除第一个节点(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()释放内存。