这里是reversePrint功能:
void SinglyLinkedList::reversePrint(Node* p)
{
if (p == NULL) {
return;
} else {
reversePrint(p->next);
cout << p->data << " ";
}
}
(即:list = 1 -> 2 -> 3 -> 4
,print out = 4 3 2 1
)
仅当*p
最初指向*head
指向的内容,即第一个节点1时,它才有效。但是,Node* head
是SinglyLinkedList类的私有成员,因此可以&#39;在课外访问。如何将a pointer
的{{1}}从head
传递到main
?
这就是我所说的:
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;
}
我尝试将*p
指向*head
方法中reversePrint
指向的内容。但是,它破坏了递归
class SinglyLinkedList {
public:
// constructor
SinglyLinkedList();
// destructor
~SinglyLinkedList();
// public APIs
void print();
void addNode(int number);
void reversePrint(Node* p);
private:
Node* head;
};
答案 0 :(得分:5)
将使用Node*
的成员函数移至private
部分。
创建一个不接受任何输入的public
成员函数。使用private
成员函数实现它。
void SinglyLinkedList::reversePrint()
{
this->reversePrint(this->head);
}
在调用函数中没有public
的情况下调用Node*
成员函数。
list->reversePrint();
答案 1 :(得分:3)
您可以定义一个不带参数的公共方法,另一个私有方法使用从public方法调用的参数。例如
public:
void reversePrint() const { reversePrint( head ); }
private:
void reversePrint(Node* p) const { /*...*/ }
答案 2 :(得分:1)
将void SinglyLinkedList::reversePrint(const Node* p) const
设为私有,
并添加一个调用void SinglyLinkedList::reversePrint() const
的公共重载reversePrint(head)
。
或者,您可以将吸气剂添加到head
。