我尝试使用递归在链接列表中的每个节点中打印数据,但是我越界出错,所以我觉得我的递归函数有问题。< / 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块中执行此操作?
有没有更好的方法递归执行此操作?代码是否适用于其他任何人?我似乎无法让它发挥作用。
答案 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);
}