我正在尝试创建一个递归链表。 目前我只是为类提供两种方法,一种用于尾部插入和一次打印。 我不明白为什么它不打印任何东西。 我认为主要的问题是recInsert(node,key)方法,它总是将头节点解释为NULL。 我做错了什么?
我想打印序列8->7->12->22
这是我的代码:
template<class H>class NodeList{
private:
NodeList<H> *prev,*next;
H* key;
public:
NodeList(NodeList<H> *next,H *key){
this->next = next;
this->key = new H(*key);
}
NodeList<H> *getPrev(){return prev;}
NodeList<H> *getNext(){return next;}
void setPrev(NodeList<H> *prev){this->prev = prev;}
void setNext(NodeList<H> *next){this->next = next;}
void setKey(H *key){this->key = new H(*key);}
H *getKey(){return key;}
};
template<class H>class List{
private:
NodeList<H> *head;
public:
List(){
head = NULL;
}
NodeList<H>* insTail(NodeList<H> *nod,H *key){
if(nod == NULL){
nod = new NodeList<H>(nod,key);
}
else{
nod->setNext(insTail(nod->getNext(),key));
}
return nod;
}
List<H> *ins(H key){
insTail(head,&key);
return this;
}
void recPrint(NodeList<H> *head){
if(head == NULL){
return;
}
else{
cout<<*head->getKey();
recPrint(head->getNext());
}
}
void print(){
recPrint(head);
cout<<endl;
}
};
int main(){
List<int> *l = new List<int>();
l->ins(8)->ins(7)->ins(12)->ins(22);
l->print();
我已经解决了在insTail()方法
上添加头节点控件的问题NodeList<H>* insTail(NodeList<H> *nod,H *key){
if(head == NULL)
head = new NodeList<H>(NULL,key);
if(nod == NULL){
return new NodeList<H>(NULL,key);
}
else{
nod->setNext(insTail(nod->getNext(),key));
return nod;
}
}
答案 0 :(得分:1)
你几乎就在那里:head
需要分配insTail的结果:
head = insTail(head,&key);