我正在尝试递归打印我的列表,但我遇到了麻烦。输出是无限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:typedef struct node * nodePtr; 我试过这个:
void List::PrintListRecursively(nodePtr curr)
但我刚收到此错误:声明与void List :: PrintListRecursively
不兼容请帮助
答案 0 :(得分:2)
我刚收到此错误:
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);
}
答案 1 :(得分:1)
您的第二个版本有正确的想法,在递归调用之前前进到下一个列表元素,但没有正确实现它。由于PrintListRecursively
本身定义了List
(与接收一个List
实例相比),正确的推进方法是在下一个方法中调用方法元素,没有参数。
换句话说,您的第二个实现需要以cur->next->PrintListRecursively();