使用C++第2部分递归打印LinkedList
Print LinkedList Recursively using C++ Part 2
我试图递归打印我的列表,但遇到了问题。输出是无穷大2………….2……直到我的计算机崩溃。
我的递归函数如下:
//void List::PrintListRecursively()
void List::PrintListRecursively(){
if (curr==NULL)
{
cout << "n";
return;
}
cout << curr->data <<endl;
PrintListRecursively();
}
我的主要功能如下:
int main()
{
List myList;
myList.insertAtTail(2);
myList.insertAtTail(3);
myList.insertAtHead(0);
myList.insertAtHead(-1);
myList.insertAtHead(-2);
myList.PrintListRecursively();
}
我最初的递归函数是下面的代码,但我不知道如何将参数传递给原始函数,因为它是一个void函数。函数不一定是void,我只是不知道如何传递指向函数的指针,尤其是递归。递归总是让我失望。
void List::PrintListRecursively(){
if (curr==NULL)
{
cout << "n";
return;
}
cout << curr->data <<endl;
PrintListRecursively(curr->next);
}
有人建议:
void List::PrintListRecursively(Node* curr)
因为我使用的是typedef:typedefstruct-node*nodePtr;我试过这个:
void List::PrintListRecursively(nodePtr curr)
但我只是得到了这个错误:声明与void List::PrintListRecursively 不兼容
请帮助
我刚刚得到这个错误:
Declaration is incompatible with void List::PrintListRecursively
您的声明和定义必须匹配。您可以保留不带参数的公共函数,然后提供第二个实现。所以你的声明是这样的:
class List {
//...
public:
void PrintListRecursively();
private:
void PrintListRecursively(nodePtr curr);
};
定义:
void List::PrintListRecursively(){
PrintListRecursively(head);
}
void List::PrintListRecursively(nodePtr curr) {
if (curr==NULL)
{
cout << "n";
return;
}
cout << curr->data <<endl;
PrintListRecursively(curr->next);
}
您的第二个版本有正确的想法,在递归调用之前前进到下一个列表元素,但没有正确实现。由于PrintListRecursively
是在List
本身上定义的(与接收List
实例相反),因此正确的前进方式是在下一个元素上调用方法,而不使用参数。
换句话说,您的第二个实现需要以cur->next->PrintListRecursively();
结束
相关文章:
- 如何使用递归打印修改后的星号三角形图案
- 使用递归 c++ 打印模式
- 使用类进行实现时,递归打印C++中的链表
- 如何使用递归打印最长公共子序列中涉及的字符串?
- 使用递归打印所有递增子序列
- 二叉搜索树按级别递归C++打印节点
- 使用递归打印输出
- 如何使用递归打印文本反驳
- 使用while和if递归打印字符
- 将数组传递到空隙函数,然后递归打印元素
- 在 C++ 中使用递归打印斐波那契级数
- 如何使用字符串流C++递归打印出二进制搜索树中的所有节点
- IntStack的C++递归打印函数
- 使用C++第2部分递归打印LinkedList
- 使用C++递归打印LinkedList
- C++如何递归打印阶乘程序的输出
- 如何使用类链表进行递归打印
- 使用斐波那契递归打印 1 到 n
- 使用单个参数递归打印菱形
- 使用递归C++打印等边三角形A-Z