У меня есть собственный список (дважды связанный список, а не 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 *
...
}
Приведенный выше код работает на 2-й объект в списке, который я хочу, за исключением переместитесь влево (или вверху). (То есть сказать, если список (obj5, obj9, obj11, obj12, ..), двигаясь obj9 к первому в списке дает ошибку)
Просьба указать [Минимальный, полный и проверенный пример] (http://www.stackoverflow.com/help/mcve). – Barry
Отлаживайте свой код, или рисуйте картинку и посмотрите, что происходит. – vsoftco
@Harry Kodz Вы можете менять значения узлов без изменения ссылок. :) –