链接列表

时间:2017-09-13 18:17:27

标签: c++

我正在尝试创建一个递归链表。 目前我只是为类提供两种方法,一种用于尾部插入和一次打印。 我不明白为什么它不打印任何东西。 我认为主要的问题是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;
        }
    }

1 个答案:

答案 0 :(得分:1)

你几乎就在那里:head需要分配insTail的结果:

head = insTail(head,&key);