在双向链表的中间插入一个节点

时间:2013-10-31 19:50:52

标签: c++ list linked-list

我必须构建一个函数,其目的是在由DequeIterator类管理的iter位置之前/之后插入一个节点。为了做到这一点,我必须将所有指针链接到正确的位置,使它们相互连接,然而,我在将所有指针链接到正确的节点时遇到问题。

例如,如果我有节点A,B,D,E的双向链表,那么我的iter指向节点D,我想在节点D之前插入一个节点C.任何人都可以帮忙我出去?谢谢

// iter will be an object from the DequeIterator.
void insert_before(DequeIterator<E>& iter, E x)
{
        // make sure the list is not empty
        // since I have a function insert_front already        
    assert(!is_empty());
        // create a temp pointer to hold node D 
    DNode<E>* temp = iter.node();
        // create a new node C, with its prev points to (D->prev)
        // and its next points to node C
    DNode<E>* temp2 = new DNode<E>(iter.node()->prev(), x, iter.node());

        // I know that I still have 2 more pointer to link
        // but I do not know how to get it connected from
        // node B to node C and node C to node D.
    iter.node()->next() = temp2;  // I attempted to do this, but it gave me an error

    _size++;
}

这是我遇到的错误

Error   1   error C2106: '=' : left operand must be l-value e:\fall 2013\cpsc 131\linkeddeque\linkeddeque\main.cpp  312

1 个答案:

答案 0 :(得分:3)

错误表示next()中的函数iter.node()->next()按值返回。这导致编译器对结果进行临时复制(这是一个rvalue)。由于其临时性,您无法为其指定其他值。

要解决您的问题,您应该更改next()函数的签名,以便它返回对下一个节点(指针)的引用:

DNode<E>*& next();

最好还包括const版本:

DNode<E>* const& next() const;

这使您即使在使用next()时也可以检索const DNode<E>节点。