我从以下代码中遇到段错误。我认为这与我的函数调用有关?
I'm getting a seg fault from the following code. I think it has something to do with my function call?
此代码应该使用包装函数计算所有节点。这是一个循环链表,所以我指向 rear->next with temp 然后遍历 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);
}
你最终得到了无限递归,因为你的条件 return
if (rear == temp)
return 1;
正在将您的前一个节点与下一个节点进行比较,因此不会 return #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);
}
此代码应该使用包装函数计算所有节点。这是一个循环链表,所以我指向 rear->next with temp 然后遍历 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);
}
你最终得到了无限递归,因为你的条件 return
if (rear == temp)
return 1;
正在将您的前一个节点与下一个节点进行比较,因此不会 return #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);
}