c++ - 我从以下代码中得到一个段错误。我认为这与我的函数调用有关?
问题描述
此代码应该使用包装函数计算所有节点。这是一个循环链表,所以我用temp指向rear->next,然后用temp遍历直到temp ==rear。
int count_all(node *rear) {
int count = 0;
if (!rear)
return 0;
if (rear == rear->next)
return 1;
return recursive_count_all(rear,count);
}
int recursive_count_all(node *rear,int &count) {
if (!rear)
return 0;
node * temp = rear->next;
if (rear == temp)
return 1;
else
temp = temp->next;
return recursive_count_all(rear->next, ++count);
}
解决方案
你最终会有一个无限递归,因为你的条件返回
if (rear == temp)
return 1;
正在将您的前一个节点与下一个节点进行比较,因此不会返回 #nodes > 1。一旦到达您开始使用的第一个节点,您应该打破递归条件。
所以像这样
int count_all(node *rear) {
int count = 0;
if (!rear)
return 0;
if (rear == rear->next)
return 1;
return recursive_count_all(rear,rear,count);
}
int recursive_count_all(node* n0, node *rear,int &count) {
if (!rear)
return 0;
node * temp = rear->next;
if (n0 == temp)
return 1;
else
temp = temp->next;
return recursive_count_all(n0, rear->next, ++count);
}
推荐阅读
- syntax - 'static 可以放在结构声明中吗?
- microsoft-graph-api - 拒绝访问以在消息上添加 Microsoft Graph 架构扩展
- r - 为什么我不能在 R 中使用 apply 函数将 .rda 文件加载到 R 工作区?
- python - 'Student' 对象没有属性 'print_details'
- c# - 在加载 aspx 页面时显示加载图像和文本
- ruby-on-rails - Rails 5 控制台查询来计算数据库中的所有记录?
- flutter - 在颤动中获取不同位置的当地时间
- c# - 为什么使用 IAsyncEnumerable 比返回异步/等待任务慢
? - r - 小鼠的 pool.compare 为 lmerTest 模型提供“错误:类调用对象的无一目了然方法”
- python - Python 3.6 无法导入 gnuradio (3.7.9)