首页 > 解决方案 > 使用引用指向节点的指针的函数删除链表中的节点?

问题描述

考虑一个已实现的struct Node

template <class T>
struct Node {
    Node<T> * next;
    T data;
    // Other functions for adding nodes etc...
};

然后给出一个函数remove(...),它接受参数 1)对指向节点的指针的引用 p和 2)d要删除的数据:

template <class T>
void remove(Node<T> *& p, T d) {
    if (p != nullptr) {
        if (p->data == d) {
            Node<T> * temp = p;
            p = p->next;
            delete temp;
            remove(p, d);
        }
        else {
            remove(p->next, d);
        };
    };
};

问题

我不太明白这将如何工作。既然temp指向p,分配的不会在p=p->next中被删除delete temp,导致这个函数失败吗?有什么我想念的吗?也许与指针p作为引用传递有关?

谢谢你。

标签: c++pointerslinked-listreferencenodes

解决方案


由于 temp 指向p,在 delete temp 中无论如何都不会删除分配p=p->next的内容,从而使此功能失败?

temp不是指向p而是指向什么p。请注意,指针是具有收件人作为值的变量,并且当 rhs 上的指针返回其值时。

并且赋值p = p -> next使 的值成为(即)返回的地址p之后的节点的地址pp -> next


推荐阅读