c++ - 使用双指针和递归的单链表反转
问题描述
我尝试使用指向头节点的指针来反转链表,该头节点在下面的函数中用作参数:
void reverseLLRec(Node** start) {
Node* curr;
// Empty list
if (*start == NULL) {
return;
}
curr = *start;
if (curr->link == NULL) {
*start = curr;
return;
}
reverseLLRec(&(curr->link));
curr->link->link = curr;
curr->link = NULL;
}
我得到以下输出 -
似乎*start
指针没有被修改为指向新的头。
我在这里做错了什么?
解决方案
因为您curr->link
通过将其地址传递给递归调用来进行更改,所以下一次使用的curr->link
不再引用您想要的节点。
你不应该让递归调用改变curr->link
。另一方面,您应该更改*start
,因为它必须指代新的头(反转后)。所以将该地址传递给递归调用。
所以替换这一行:
reverseLLRec(&(curr->link));
用这两行:
*start = curr->link;
reverseLLRec(start);
推荐阅读
- javascript - 为什么我的 ajax 表单认为它没有提交?
- docker - 如果我使用 docker hub 而不是 google image registry,会如何影响我的计费?
- python - 使用 Google API 存储可下载链接
- python - Flask SQLAlchemy 与 Flask Marshmallow 转储和加载不同的“列名”
- java - 如何正确实施 Google Play 结算库
- excel - 如何捕获 excel 自动过滤单元格颜色标准
- javascript - JavaScript localStorage,仅第二次检索值
- ansible - 我可以为 netbox 库存插件查找环境变量吗
- python - Python/Bash - 程序崩溃时发送警报
- c++ - 无法使用子类中定义的虚拟 getter 实现基类