我正在尝试使用c ++实现双向链表。我已经完成了大部分的实现。我怀疑自己的实现是否完美
我正在尝试删除列表中的第一个节点。然后指向头->第二个节点和第二个节点的* previous = NULL(现在将是第一个节点)
void deleteFirst()
{
if(head != NULL)
{
node *temp = new node;
temp = head;
head -> next -> prev = NULL;
head = head -> next;
delete temp;
}
else{
cout << endl << "List is Empty" << endl;
}
}
我得到正确的答案,但想验证我的指针是否正确分配。谢谢。
答案 0 :(得分:0)
此代码已损坏。
1)不实现自己的链接列表,只需使用std::list
(或者通常更好; std::vector
)。
2)不要使用NULL
,而要使用nullptr
。
3)不要使用手动内存管理;使用容器和智能指针。
4)请记住,delete
指向指针并不能神奇地将其设置为nullptr
,如果需要,您必须自己这样做。
5)您泄漏了内存;您分配了新的存储并将其地址分配给temp
,然后立即用temp
覆盖了head
,而忘记了有关新分配的存储的所有信息。
6)然后您delete temp
,这时等于delete head->next
。可能不是您想要的。
答案 1 :(得分:0)
您有两个小问题:
您创建一个新节点并将其分配给temp
。之后,您将覆盖指针以指向head
。这样,您将丢失对新创建的节点的引用,以后将无法删除它。您应该省略第一行,并将head
直接分配给temp
。
您无需检查head->next
是否为nullptr
。在这种情况下,您无法取消引用它并访问prev
。您可以使用单元素列表重现此错误。
希望这会有所帮助!