c++ - 如何移动双向链表中的元素?

标签 c++ algorithm sorting data-structures

<分区>

我在我的代码中实现了自定义列表(双向链表而不是 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 *
  ...
}

除了列表中的第二个对象,上面的代码可以工作,我想将它移到最左边(或最上面)。 (也就是说,如果 list(obj5, obj9, obj11, obj12,..),将 obj9 移动到列表中的第一个会出错)

最佳答案

参见 Bubble-sorting doubly linked list

我假设你的 Elem 类也包含数据,所以移动数据或者 - 如果它是一个简单的数据指针 - 交换指针:C++ Swapping Pointers .

如果那不可能,我会 - 从“不要重复自己”的角度来看 - 重用那些你很可能已经拥有的简单链表函数:

void move_element_left(Elem *e)
{
    Elem *left = e->prev();

    if(left)
    {
        remove_element(e);
        insert_element_before(e, left);
    }
}

关于c++ - 如何移动双向链表中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30822164/

相关文章:

c++ - 如何在caffe中提取图层的blob信息?

c++ - 每 (n) 秒打印一次的程序

javascript - 如何对数组进行高效排序

python - 如何在二维数组中找到最接近的匹配字符串对

javascript - 如何按字母顺序对元素进行排序并区分大小写

python - 为什么我的排序代码执行时间不一致?

C++ std::vector 迭代器错误

c++ - 如何检查两个模板参数是否完全相同?

algorithm - 蒙特卡洛树搜索 : Opponent moves before MCTS tree border

java - 使用分页计算字段的服务器端排序?