双重链接列表--在删除了node1之后,我是否指向node2-> prev = null?

时间:2019-05-03 19:59:49

标签: c++ data-structures linked-list doubly-linked-list

我正在尝试使用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;
            }

        }

我得到正确的答案,但想验证我的指针是否正确分配。谢谢。

2 个答案:

答案 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)

您有两个小问题:

  1. 您创建一个新节点并将其分配给temp。之后,您将覆盖指针以指向head。这样,您将丢失对新创建的节点的引用,以后将无法删除它。您应该省略第一行,并将head直接分配给temp

  2. 您无需检查head->next是否为nullptr。在这种情况下,您无法取消引用它并访问prev。您可以使用单元素列表重现此错误。

希望这会有所帮助!