提问者:小点点

无法打印链接列表的数据


第一次练习写链表。

定义类node如下所示

template<class T>
class node
    {
    public:
        node(T _data, node* _link) : data(_data), link(_link){}
        T getdata(){
            return data;
        }
        node* getlink(){
            return link;
        }
        void setdata(T data){
            this->data = data;
        }
        void setlink(node* link){
            this->link = link;
        }
        void print(){
            while (!isEnd()){
                std::cout << data << endl;
                link = link->link;//go to the next node
            }
        }
        bool isEnd(){
            if (link == NULL)
                return true;
            return false;
        }
    private:
        T data;
        node* link;
    };

然后我实现了如下的主要功能。

//get data1 and data2
    node<int>* Head = new node<int>(data2, NULL);
    Head = new node<int>(data1, Head);

    Head->print();

我希望看到data1和data2显示在控制台窗口上。 但是,只有data1出现。

不知道是不是把成员函数print()写错了。 谢了。


共1个答案

匿名用户

Print不应是成员函数。 相反,编写一个像这样的全局函数(我将该函数重命名为print_list)。

    void print_list(node* n){
        while (!n->isEnd()){
            std::cout << n->getdata() << endl;
            n = n->getlink(); //go to the next node
        }
    }

像这样使用它

    print_list(Head);

节点成员函数应该是关于单个节点的东西。 打印列表是关于整个列表的事情。 如果您有一个list类,那么将print作为list类的成员是有意义的。 但是,由于您没有list类,您应该使print_list成为不属于任何类的全局函数。