c++ - 使用引用指向节点的指针的函数删除链表中的节点?
问题描述
考虑一个已实现的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
作为引用传递有关?
谢谢你。
解决方案
由于 temp 指向
p
,在 delete temp 中无论如何都不会删除分配p=p->next
的内容,从而使此功能失败?
temp
不是指向p
而是指向什么p
。请注意,指针是具有收件人作为值的变量,并且当 rhs 上的指针返回其值时。
并且赋值p = p -> next
使 的值成为(即)返回的地址p
之后的节点的地址p
p -> next
推荐阅读
- python-3.x - 较差的 GMM 适合 2 高斯的 sklearn
- python - 将一个图形的输出添加到另一个图形
- java - 如何在 void 方法内更新后断言对象值 - Junit
- java - Docker容器启动时在jar中找不到api-rest的主类
- tortoisegit - 在 TortoiseGit 中撤消特定文件还原
- c# - 错误:在类型中找不到正确签名的 EventHandler“btnLogin_Clicked”
- html - 部分/Div 的重叠
- java - 带有 Swing 客户端的 Spring Boot 后端
- c# - 使用 Linq to Datatable 显示日期时间的最佳方法是什么?
- java - 为什么 XSSFRichTextString.applyFont() 不能像在 java doc 中那样工作?