C ++链表的递归插入

时间:2017-12-21 14:37:27

标签: c++ recursion

当我将一个节点的递归插入实现到链表中并显示它时,我什么也得不到。我不明白如何解决问题。

我的代码是:

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函数。我确定递归插入中存在问题,因此我无法识别它。

1 个答案:

答案 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()返回的节点是根节点。