链接列表递归...

时间:2010-03-29 03:26:43

标签: c++ algorithm

我想用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);
  }
}

在主程序中我应该写什么......

1 个答案:

答案 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;
}