C++ 在链接列表的后面插入

C++ 在链接列表的后面插入,c++,linked-list,C++,Linked List,我试图得到一个可以调用insert_的工作函数,它将把值插入列表的末尾 到目前为止,我已经掌握了代码,我想我已经被难住了 template <class Object> void List<Object>::insert_back( const Object& data ) { ListNode<Object>* newnode = new ListNode<Object>( data, head->getNext()

我试图得到一个可以调用insert_的工作函数,它将把值插入列表的末尾

到目前为止,我已经掌握了代码,我想我已经被难住了

    template <class Object>
void List<Object>::insert_back( const Object& data ) {
    ListNode<Object>* newnode = new ListNode<Object>( data, head->getNext() );
        if (!head) {

            head = newnode;
            return;
        }
        while (head->getNext()) {
            continue;
        }
        head->setNext( newnode );
    }
模板
无效列表::回插(常量对象和数据){
ListNode*newnode=newListNode(数据,head->getNext());
如果(!头){
头=新节点;
返回;
}
while(head->getNext()){
继续;
}
head->setNext(新节点);
}
当我调用insert_时,这将不返回任何内容并阻塞程序

.H文件

#ifndef LIST_H
#define LIST_H
#include <iostream>
#include "ListNode.h"
#include "ListIterator.h"

namespace cs20 {

template <class Object>
class List {
    public:
    List();
    List( const List& rhs );
    ~List();

    bool isEmpty() const;
    bool isIncreasing() const;
    void makeEmpty();
    ListIterator<Object> zeroth() const;
    ListIterator<Object> first() const;
    void insert( const Object& data,
                 const ListIterator<Object> &iter );
    void insert( const Object& data );
    void insert_back( const Object& data );
    ListIterator<Object> findPrevious( const Object& data ) const;
    void remove( const Object& data );

    const List& operator =( const List& rhs );
    const List& operator <<( const List& rhs );
private:
    ListNode<Object> * head;

};

}
#endif
\ifndef列表
#定义列表
#包括
#包括“ListNode.h”
#包括“ListIterator.h”
名称空间cs20{
模板
班级名单{
公众:
List();
列表(施工列表和rhs);
~List();
bool isEmpty()常量;
布尔是递增的常数;
void makeEmpty();
ListIterator zeroth()常量;
ListIterator first()常量;
无效插入(常量对象和数据,
常量列表迭代器和iter);
无效插入(常量对象和数据);
void insert_back(常量对象和数据);
ListIterator findPrevious(常量对象和数据)常量;
无效删除(常量对象和数据);
常量列表和运算符=(常量列表和rhs);

常量列表和运算符将代码更改为:

ListNode<Object>* lastNode = head;
while (lastNode->getNext())
    lastNode = lastNode->getNext();
lastNode->setNext( newnode );
ListNode*lastNode=head;
同时(lastNode->getNext())
lastNode=lastNode->getNext();
lastNode->setNext(新建节点);

将您的代码更改为:

ListNode<Object>* lastNode = head;
while (lastNode->getNext())
    lastNode = lastNode->getNext();
lastNode->setNext( newnode );
ListNode*lastNode=head;
同时(lastNode->getNext())
lastNode=lastNode->getNext();
lastNode->setNext(新建节点);
这看起来可疑:

ListNode<Object>* newnode = new ListNode<Object>( data, head->getNext() );
ListNode*newnode=newlistnode(数据,head->getNext());
您正在将
head->getNext()
传递到新节点中。我假设该参数初始化新列表节点中的下一个指针。您应该传递
NULL
,而不是列表的第二个元素

另一个问题是,您在
insert\u back
中修改了
head
head
变量是您的类的成员。如果您将head一直移动到列表的末尾,您将丢失列表。请使用临时变量进行迭代。

这看起来可疑:

ListNode<Object>* newnode = new ListNode<Object>( data, head->getNext() );
ListNode*newnode=newlistnode(数据,head->getNext());
您正在将
head->getNext()
传递到新节点中。我假设该参数初始化新列表节点中的下一个指针。您应该传递
NULL
,而不是列表的第二个元素


另一个问题是,您在
insert\u back
中修改
head
head
变量是您的类的一个成员。如果您将head一直移动到列表的末尾,您将丢失列表。请使用临时变量进行迭代。

除非您真的不关心性能,否则您可能会遇到问题你想在你的
列表
类中添加一个
ListNode*tail;
。让它指向列表中的最后一个节点。当你需要添加新节点时,在它指向的节点之后立即添加新节点,并将其更新为指向你刚刚添加的新节点。

除非你真的不关心性能,否则你可能会nt将
ListNode*tail;
添加到您的
列表
类中。使其指向列表中的最后一个节点。当您需要添加新节点时,请在其指向的节点之后立即添加新节点,并将其更新为指向您刚才添加的新节点。

可能的重复项能否提供有关您尝试的详细信息到目前为止,您遇到了哪些具体错误,以及您的测试代码是什么?我们不一定会重现错误。可能的重复。请您提供更多详细信息,说明您迄今为止尝试了哪些错误,您遇到了哪些具体错误,以及您的测试代码是什么?我们不一定会重现错误。谢谢!唯一的问题是,尽管没有他的作品…它无限重复数字列表,直到我不得不手动停止程序..然后你在创建节点循环的某个地方添加逻辑时出错,当next指向自身而不是next或NULL时,也检查@paddy的注释-可能是循环问题的根源很好,我应该能够在接下来的时间内解决它顺便说一句,非常感谢!谢谢!唯一的一件事是,虽然这样做有效…但它会无限重复数字列表,直到我不得不手动停止程序..然后在创建节点循环的某个位置添加逻辑时出现错误,当next指向自身而不是next或NULL时,还要检查来自@paddy的注释-可能是循环p的根问题太好了,我应该能够在剩下的过程中解决问题,非常感谢!