【问题标题】:Doubly Linked List InsertBack Method problem双向链表 InsertBack 方法问题
【发布时间】: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


【解决方案1】:

如果它是一个双向链表,并且您正在跟踪最后一个节点...为什么要一直遍历它以追加到末尾?

你所要做的就是:

node* newNode = new node;
newNode->o = o;
newNode->previous = last;
last->next = newNode;
last = newNode;

【讨论】:

  • 啊。非常感谢。我是链接列表的初学者,这里只是先入为主。
【解决方案2】:

您缺少findLast-&gt;next = newNode;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 2017-08-18
    • 2012-03-22
    相关资源
    最近更新 更多