C++ 为什么不能;删除标题处的“;执行链接列表时是否正常工作?
我实现了以下代码来删除头部的元素。当程序运行到“delete p”时,它将影响前一个Head,Head变为NULL。发生了什么事C++ 为什么不能;删除标题处的“;执行链接列表时是否正常工作?,c++,list,hyperlink,C++,List,Hyperlink,我实现了以下代码来删除头部的元素。当程序运行到“delete p”时,它将影响前一个Head,Head变为NULL。发生了什么事 Node<T>* p; p = Head; Head = Head->next; delete p; Node*p; p=水头; 头部=头部->下一步; 删除p; 此功能将删除第一个节点(节点 用头指着)。如果节点被删除,则返回true;如果列表为空,则返回false 这里使用双指针作为输入参数(head),因为he
Node<T>* p;
p = Head;
Head = Head->next;
delete p;
Node*p;
p=水头;
头部=头部->下一步;
删除p;
此功能将删除第一个节点(节点
用头指着)。如果节点被删除,则返回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释放节点的内存。如果指向的内存为空,delete会小心处理
如果已使用malloc()将内存分配给节点,则应使用free()解除分配。如果head为null,则无法执行
head=head->next代码>您需要先检查。您可能没有显示足够的代码来识别真正的问题。也许您在函数中调用了它,并按值传递了Head
,注意到调用函数中的Head
没有更新。欢迎使用堆栈溢出。这个代码看起来不错;也许问题在别处。没有一句话,很难说得更多。是的。你是对的。当我调试代码时,Head=Head->next已经成功。因此,下一步“删除p”现在不应该影响Head的数据。但是当我检查头部数据时,我发现它也发生了变化,并被设置为头部“=0x008f4a20{data=-17891602 next=0xfeeefeee}”,我现在找不到原因。0xfeeefeee
是一个重要的代码: