递归打印列表

时间:2016-09-09 16:51:03

标签: c++ recursion linked-list

我尝试使用递归在链接列表中的每个节点中打印数据,但是我越界出错,所以我觉得我的递归函数有问题。< / p>

这是头文件:

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块,因为如果没有下一个节点我需要停止,但是在返回之前还要在当前Node中打印数据,但是因为我已经在最后调用了n->next printList(out, n->next),我是否需要在if块中执行此操作?

有没有更好的方法递归执行此操作?代码是否适用于其他任何人?我似乎无法让它发挥作用。

1 个答案:

答案 0 :(得分:5)

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