【发布时间】:2015-06-13 18:30:53
【问题描述】:
我在我的代码中实现了自定义列表(双向链表而不是 std::list)。我的要求是通过更新引用将元素向左或向右移动。有可能吗?
class Elem
{
Elem *next;
Elem *prev;
}
.......
void move_element_left(Elem *e)
{
if(e->prev()==NULL)
return; //Left most ... so return
Elem *left = e->prev();
left->next() = e->next();
e->prev() = left->prev();
if (left->next())
left->next()->prev() = left;
if (e->prev())
e->prev()->next() = e;
e->next() = left;
left->prev() = e;
}
.......
int main()
{
ElemList ls;
...
...
move_element_left(e); //e of type Elem *
...
}
除了列表中我想移到最左边(或最上面)的第二个对象之外,上面的代码都有效。 (即如果列表(obj5,obj9,obj11,obj12,..),将 obj9 移动到列表中的第一个会出错)
【问题讨论】:
-
调试你的代码,或者画一张图看看发生了什么。
-
@Harry Kodz 您可以在不更改引用的情况下交换节点的值。:)
-
@Harry Kodz 你还应该展示 ElemList 是如何定义的。
-
@vsoftco 嗯,他去报名绘画课了。:)
标签: c++ algorithm sorting data-structures