gpt4 book ai didi

c++ - 在双向链表中间插入节点

转载 作者:行者123 更新时间:2023-11-28 00:39:12 25 4
gpt4 key购买 nike

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

例如,如果我有一个节点 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

最佳答案

错误意味着函数next()iter.node()->next()按值(value)返回。这导致编译器制作结果的临时拷贝(右值)。由于其临时性,您无法为其分配其他值。

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

DNode<E>*& next();

最好还包含一个 const版本:

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

这允许您检索 next()即使使用 const DNode<E> 节点的。

关于c++ - 在双向链表中间插入节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19715418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com