我试图使用递归在链表中打印每个节点的数据,但我正在越界错误,所以我认为我的递归函数有问题。
头文件:
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);
}