当我将一个节点的递归插入实现到链表中并显示它时,我什么也得不到。我不明白如何解决问题。
我的代码是:
template <class H> class Node {
private:
H key;
Node <H> *next;
public:
Node(H key) {
this->key = key;
next = NULL;
}
Node(H key, Node <H> * next) {
this->key = key;
this->next = next;
}
void setKey(H key) {
this->key = key;
}
void setNext(Node <H> * next) {
this->next = next;
}
H getKey() {
return key;
}
Node <H> *getNext() {
return next;
}
};
template <class H> class LinkedList {
private:
Node <H> *header;
Node <H> * insertHead( Node <H>* header, H data)
{
if (header == NULL)
return new Node <H>(data);
else
header->setNext(insertHead(header->getNext(), data));
return header;
}
public:
LinkedList() {
header == NULL;
}
LinkedList <H> *insert(int x) {
insertHead(header,x);
return this;
}
void print() {
Node <H> *tmp = header;
while (tmp != NULL) {
cout << tmp->getKey() << " ";
tmp = tmp->getNext();
}
}
};
int main() {
LinkedList <int> *lset = new LinkedList <int> ();
lset->insert(89)->insert(56)->insert(8);
lset->print();
}
在main函数中,我创建了一个新的Linked列表,然后调用了insert函数。我确定递归插入中存在问题,因此我无法识别它。
答案 0 :(得分:0)
问题是您在添加第一个节点后没有更改根节点header
。添加节点后,header
仍为null。修复是改变
LinkedList <H> *insert(int x) {
insertHead(header,x);
return this;
}
到
LinkedList <H> *insert(int x) {
header = insertHead(header,x);
return this;
}
insertHead()返回的节点是根节点。