【发布时间】:2011-08-07 02:03:37
【问题描述】:
好吧,由于某种原因,这段代码不适用于我的双向链表模板类 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;
}
}
first 和 last 对应于 Dlist 的第一个和最后一个节点。我的问题是最后没有分配给 newNode 。当我调试(使用 VS2010)时,newNode 被正确分配了方法参数的值,并且它的“前一个”节点被正确分配给“findLast”。但是当我将 last 分配给 newNode 时,什么也没有发生。
如果不是很明显,我很乐意发布 Dlist 的实际类定义,尽管它是一个非常标准的链表。
感谢您的帮助!
【问题讨论】:
-
现在我觉得遍历列表很傻,因为它是一个双向链表。
-
请注意,您可能希望以相同的方式实现单链表。如果您必须遍历列表,跟踪尾部(最后一个)允许 O(1) 执行时间与 O(n) 相比。
标签: c++ class linked-list