第一次练习写链表。
定义类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()
写错了。 谢了。
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
成为不属于任何类的全局函数。