我想用C ++做一个递归函数
我制作这个课程
class linklist
{
private:
struct node
{
int data;
node *link;
}*p;
};
void linklist::print_num(node* p)
{
if (p != NULL)
{
cout << p->data << " ";
print_num (p->link);
}
}
在主程序中我应该写什么......
答案 0 :(得分:1)
1:建立清单
2:保留第一个节点
3:第一个节点上的print_num
我必须在代码中进行大量更改才能使其正常工作。我猜你曾经写过Java ......
但在我的主要内容中我得到了:
node *first = NULL;
for (int i = 10; i > 0; i--) {
node *temp = new node;
temp->data = i;
temp->link = first;
first = temp;
}
linklist::print_num(first);
更新1:
好吧,显然你没有得到你应该用这段代码做什么,所以我现在正在为你发布整件事。认为自己非常幸运,并尝试从中学习。 如果您仍有问题,请更清楚您的问题/要求。
#include <iostream>
using namespace std;
struct node {
int data;
node *link;
};
class linklist {
public:
static void print_num(node* p) {
if (p != NULL) {
cout << p->data << " ";
print_num (p->link);
}
}
};
int main() {
node *first = NULL;
for (int i = 10; i > 0; i--) {
node *temp = new node;
temp->data = i;
temp->link = first;
first = temp;
}
linklist::print_num(first);
return 0;
}
更新2:
重新格式化代码后,我注意到您希望隐藏节点结构。 为了能够做到这一点,你需要在你的类中添加一个add方法,它可以添加节点和一个你可以在没有节点的情况下调用的打印方法。
因此,我想到了这个:
#include <iostream>
using namespace std;
class linklist {
public:
linklist();
void print();
void add(int number);
private:
struct node {
int data;
node *link;
};
void print_num(node *p);
node* start;
};
linklist::linklist() {
start = NULL;
}
void linklist::print() {
print_num(start);
}
void linklist::add(int number) {
node* temp = new node;
temp->data = number;
temp->link = start;
start = temp;
}
void linklist::print_num(node *p) {
if (p != NULL) {
cout << p->data << " ";
print_num (p->link);
}
}
int main() {
linklist list;
for (int i = 10; i > 0; i--) {
list.add(i);
}
list.print();
return 0;
}