我试图用递归方式在链表中的每个节点上打印数据,但是我越界了,所以我认为我的递归函数有问题。递归地打印一个列表
这里的头文件:
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区块中执行此操作?
有递归执行此操作的更好方法吗?代码是否适用于其他人?我似乎无法得到它的工作。
我宁愿写'无效列表::的printList(STD :: ostream的进出,常量节点* N)const的 { 如果(N == NULL){ 回报; } out << n-> data << std :: endl; printList(out,n-> next);为简单起见, –
您确定在创建节点时将节点的'next'指针初始化为空指针吗?或者至少确保列表中最后一个节点的'next'指针是空指针? –
在基本情况下是否正确将'n-> next'设置为'nullptr'?或者它是一个随机的,未初始化的地址? – RyanP