使用函数引用指向节点的指针删除链表中的节点?



考虑一个实现的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作为引用传递有关?

谢谢。

由于临时指向p,分配的p=p->next不会被删除 无论如何,在删除临时,使此功能失败?

temp不是指向p,而是指向p要点。请注意,指针是将收件人作为值的变量,当 rhs 上的指针返回其值时。

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

最新更新