c++ 当链表中的头节点被删除时,下一个节点会发生什么?

1dkrff03  于 2023-05-30  发布在  其他
关注(0)|答案(1)|浏览(127)

我正在使用算法,对释放指针有疑问,特别是删除链接列表的第一个元素,下面是方法:

template<typename T>
class LinkedList
{
    {
        T value;
        Node *next;
        Node(T value)
        {
            this->value = value;
            this->next = nullptr;
        }
        Node(T value, Node *next)
        {
            this->value = value;
            this->next = next;
        }
        ~Node()
        {
          
        };
    };

public:
    Node *head;
    Node *tail;
  
    LinkedList()
    {
        this->head = this->tail = nullptr;
    }

    ~LinkedList()
    {
        Node *curr = this->head;
        while (curr != nullptr)
        {
            Node* next = curr->next;
            delete curr;
            curr = next;
        }
    }

    void addFirst(T value)
    {
        Node *newNode = new Node(value);
        if (!this->head)
        {
            this->head = this->tail = newNode;
            return;
        }
        newNode->next = this->head;
        this->head = newNode;
    }

  

    void removeFirst(){

        if(!this->head) return;

        Node* tmp = this->head->next;
        delete this->head;
        this->head = tmp;
    }
};

我的问题是,由于tmp指向head的下一个节点,因此在释放head时,它会释放内存(head的值和对下一个节点的引用)。下一个节点会失效吗?有人能进一步解释我在删除这个->头部时到底发生了什么吗?

ymdaylpp

ymdaylpp1#

AFAIK,删除this->head会删除指向下一个节点的指针,但不会删除下一个节点的实际内存。像你这样删除this->head是可以的。

相关问题