好吧因为某些原因,这个代码对于双向链表模板类Dlist的insertBack函数来说并不是很有用。
template <typename T>
void Dlist<T>::insertBack(T *o)
{
node *findLast;
node* newNode = new node;
newNode->next = NULL;
newNode->prev = NULL;
newNode->o = o;
if (first == NULL){
first = newNode;
last = newNode;
} else {
findLast = first;
while (findLast->next){
findLast = findLast->next;
}
newNode->prev = findLast;
last = newNode;
}
}
第一个和最后一个对应于Dlist的第一个和最后一个节点。我的问题是最后没有将“last”分配给newNode。当我调试(使用VS2010)时,newNode被正确分配方法参数的值,并且其“前一个”节点被正确分配给“findLast”。但是,当我将最后一个分配给newNode时,没有任何反应。
如果它不是立即明显的东西,我很乐意发布Dlist的实际类定义,尽管它是一个非常标准的链表。
感谢您的帮助!
答案 0 :(得分:0)
你缺少findLast->next = newNode;
答案 1 :(得分:0)
如果它是一个双向链表并且你正在跟踪最后一个节点......你为什么要一直迭代它以追加到最后?
您所要做的就是:
node* newNode = new node;
newNode->o = o;
newNode->previous = last;
last->next = newNode;
last = newNode;