C++ reversePrint链接列表递归

Hei*_*erg 1 c++ recursion

这是reversePrint功能:

void SinglyLinkedList::reversePrint(Node* p)
{
    if (p == NULL) {
        return;
    } else {
        reversePrint(p->next);
        cout << p->data << " ";
    }
}
Run Code Online (Sandbox Code Playgroud)

(即:list = 1 -> 2 -> 3 -> 4,print out = 4 3 2 1)

它只有在*p最初指向指向的内容时才有效*head,即第一个节点1.但是,Node* headSinglyLinkedList类的私有成员因此无法在类外访问.我怎样才能将a pointer这些点传递headmain

这就是我在说的:

int main() {
  SinglyLinkedList *list = new SinglyLinkedList();
  list->addNode(1);
  list->addNode(2);
  list->addNode(3);
  list->addNode(4);

  Node* p = head;  // <---- Xcode says: Use of undeclared identifier 'head'
  list->reversePrint(p);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我试图从方法内部指出*p什么.但是,它扰乱了递归*headreversePrint

class SinglyLinkedList {

public:
    // constructor
    SinglyLinkedList();

    // destructor
    ~SinglyLinkedList();

    // public APIs
    void print();
    void addNode(int number);
    void reversePrint(Node* p);

private:
    Node* head;
};
Run Code Online (Sandbox Code Playgroud)

R S*_*ahu 5

  1. 将使用a的成员函数移动Node*到该private部分.

  2. 创建一个public不接受任何输入的成员函数.使用private成员函数实现它.

    void SinglyLinkedList::reversePrint()
    {
       this->reversePrint(this->head);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. public没有Node*调用函数的情况下调用成员函数.

    list->reversePrint();
    
    Run Code Online (Sandbox Code Playgroud)