C++ 在链接列表的后面插入
我试图得到一个可以调用insert_的工作函数,它将把值插入列表的末尾 到目前为止,我已经掌握了代码,我想我已经被难住了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()
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的根问题太好了,我应该能够在剩下的过程中解决问题,非常感谢!