【问题标题】:I'm getting a seg fault from the following code. I think it has something to do with my function call?我从以下代码中得到一个段错误。我认为这与我的函数调用有关?
【发布时间】:2020-05-18 03:53:27
【问题描述】:

此代码应该使用包装函数计算所有节点。这是一个循环链表,所以我用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);
}

【问题讨论】:

  • 这是一种定义链表的有趣方式,rear == rear->next;你确定吗?
  • 几天前我们刚接触到循环链表 ADT。您想检查是否后==后->下一步以查看它是否为单项列表。
  • 包装器应该可以直接用初始值return recursive_count_all(rear, 0);调用递归函数。
  • 我错过了“圆形”部分;我的错。您的递归调用中可能需要两个node

标签: c++ recursion segmentation-fault wrapper


【解决方案1】:

你最终会有一个无限递归,因为你的条件返回

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);
}

【讨论】:

    猜你喜欢
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 2011-08-05
    相关资源
    最近更新 更多