当前位置: 首页 > 知识库问答 >
问题:

递归打印列表

荆弘伟
2023-03-14

我试图使用递归打印链表中每个节点中的数据,但是我得到了越界错误,所以我认为递归函数有问题。

这是头文件:

class List
{
public:
    void print(std::ostream &out) const {}
private:
    Node *head;
    void printList(std::ostream&, const Node*) const;
}

基本上,我从公共print函数调用私有助手函数。下面是两个函数的代码:

void List::print(std::ostream& out) const
{
    printList(out, head);
}

void List::printList(std::ostream& out, const Node* n) const
{
    if(n->next == NULL) {
        out << n->data << std::endl;
        return;
    }

    out << n->data << std::endl;

    printList(out, n->next);
}

我认为问题出在if块中,因为如果没有下一个节点,我需要停止,但在返回之前还需要打印当前节点中的数据,但因为我已经调用了n-

有没有更好的方法来递归地做这件事?代码对其他人有用吗?我似乎无法让它工作。


共有1个答案

娄利
2023-03-14

您需要更改if()中的条件。您应该检查当前节点是否为NULL而不是下一个节点。

void List::printList(std::ostream& out, const Node* n) const { 
    if(n == NULL) { 
        return; 
    } 
    out << n->data << std::endl; 
    printList(out, n->next); 
}
 类似资料:
  • 12.3. Display,一个递归的值打印器 接下来,让我们看看如何改善聚合数据类型的显示。我们并不想完全克隆一个fmt.Sprint函数,我们只是构建一个用于调试用的Display函数:给定任意一个复杂类型 x,打印这个值对应的完整结构,同时标记每个元素的发现路径。让我们从一个例子开始。 e, _ := eval.Parse("sqrt(A / pi)") Display("e", e) 在

  • 我试图编写一个方法,使用递归打印字符串的所有排列。现在,我有这样的代码: 它打印出正确的结果,但我试图在不使用循环的情况下解决它,包括第4行中的循环。可能吗?如果是这样,你会如何解决?非常感谢。 我试图添加第三个名为index的参数,并在第5行的递归调用中写入index 1,但没有成功。我认为添加第三个参数是个好主意,我只是不知道如何使用它。

  • 我试图以相反的顺序打印一个链表,但实际上没有使用递归进行反转,但我的输出结果非常奇怪。看起来我的代码基本上选择了第一个节点,并在打印完链表的其余部分(按原始顺序)后将其打印出来。我所写的代码(据我所知)是正确的,并且与internet上解决此问题的代码相匹配。 这是我的代码: 以下是节点类: 这是我给出的输入,然后是输出: 这里发生的另一个奇怪的事情是,如果我改变递归的条件,假设我这样做: 然后是

  • 我在Hackerrank上解决反向挑战的指纹 方法接受一个参数-链表的头部。您不应该从stdin/console中读取任何输入。头部可能是空的,所以不应该打印任何东西。按照与stdout/console相反的顺序打印链表的元素(使用printf或cout),每行一个。 NB:节点的结构为struct Node{int data;struct Node*next;}

  • Iam尝试使用以下代码打印所有可能的最长公共子序列 1-首先,我找到了LCS长度dp矩阵,并尝试使用递归生成所有可能的输出。 输入和输出 实际上,每次我将字符添加到输出列表时,我都需要弹出字符并将其插入为旧的附加新的。但是当我添加行时 然后它只显示了LCS的一种可能性,而不是全部。请帮助,我哪里出错了?

  • 问题内容: 我试图写一个递归函数,从打印到,但我不知道该怎么做。我不小心做了一个从到的打印: 我不知道这是否有帮助,也许我可以更改代码中的内容以使其从变为? 问题答案: 你差点知道了!这是一个固定的简化版本: 注意: 您不必从仅打印值的递归函数返回任何内容 对于升序打印时,声明必须放在 后 递归调用 如果仅打印,则递归退出,因为我们只在打印,此后无需执行任何操作即可返回(Python的默认返回值)