递归打印列表

Printing a List Recursively

本文关键字:列表 打印 递归      更新时间:2023-10-16

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

头文件:

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块,因为我需要停止,如果没有下一个节点,但也在返回之前打印当前节点中的数据,但由于我已经在printList(out, n->next)中调用n->next,我需要在我的if块中做吗?

有更好的递归方法吗?代码是否适用于其他人?我似乎不能使它工作。

需要更改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); 
}