我正在尝试获取一个可以调用insert_back的工作函数,它会将值插入到列表的末尾
到目前为止,我有代码,我认为我已经陷入困境。 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 );
}
当我调用insert_back
时,它不会返回任何内容并阻塞程序.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
答案 0 :(得分:3)
将您的代码更改为:
ListNode<Object>* lastNode = head;
while (lastNode->getNext())
lastNode = lastNode->getNext();
lastNode->setNext( newnode );
答案 1 :(得分:1)
这看起来很可疑:
ListNode<Object>* newnode = new ListNode<Object>( data, head->getNext() );
您正在将head->getNext()
传递到新节点。我假设该参数初始化新列表节点中的下一个指针。你肯定应该通过NULL
而不是列表的第二个元素。
另一个问题是您修改head
内的insert_back
。 head
变量是您班级的成员。如果您将头部一直移动到列表的末尾,您将丢失列表。使用临时变量代替迭代。
答案 2 :(得分:0)
除非您真的不关心 关于性能,否则您可能希望在ListNode<Object> *tail;
课程中添加List
。使其指向列表中的最后一个节点。当您需要添加新节点时,请在它指向的节点之后立即添加新节点,并将其更新为指向刚刚添加的新节点。