C++ 如何从内存中删除动态添加的节点?

C++ 如何从内存中删除动态添加的节点?,c++,pointers,memory,linked-list,nodes,C++,Pointers,Memory,Linked List,Nodes,我在链表中有一个节点,定义为: class Node { public: Node* next = nullptr; int value; }; 我正在列表中插入节点,如下所示: void insertNode(Node* &head, int value) { Node* newNode = new Node; newNode->value = value; newNode->next = head; head = ne

我在链表中有一个节点,定义为:

class Node {
public:
    Node* next = nullptr;
    int value;
};
我正在列表中插入节点,如下所示:

void insertNode(Node* &head, int value) {

    Node* newNode = new Node;
    newNode->value = value;
    newNode->next = head;

    head = newNode;
}
我想在另一个函数中删除该列表中的某个节点

void deleteNode(Node* head) {
    // ...
}

如何从内存中删除现在未使用的节点?

您可以通过1)
删除它。2) 调整上一个节点以指向已删除节点后的节点(如果已删除的节点是最后一个节点,则为
nullptr

请注意,必须将指针指向单链表中的上一个节点。@LogicStuff当然。如何做到这一点,我将留给OP作为练习。比如:删除curr;上一个->下一个=当前->下一个;我现在正在尝试这个,但是我不明白为什么我删除了“curr”?@CuriousProgrammer70184“如果我删除了“curr”?,为什么我仍然可以访问“curr->next”?-你没有;这样做将是未定义的行为(即使它在您的特定情况下似乎有效)-在您完成之前不要删除某些内容。@CuriousProgrammer70184 yes.Btw;你可以用
std::list
来创建一个链表(或者在大多数情况下,更好的是,
std::vector
)——重新发明轮子是不值得的。