使用C++第2部分递归打印LinkedList

Print LinkedList Recursively using C++ Part 2

本文关键字:递归 打印 LinkedList 2部 C++ 使用      更新时间:2023-10-16

我试图递归打印我的列表,但遇到了问题。输出是无穷大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(); 结束