根据内存位置对两个链表进行排序

Gra*_*Lup 0 c++ linked-list data-structures

我需要合并两个双向链表,但不是它们的值(列表没有排序).我想获得一个列表,其中包含两个节点中的所有节点,但按照它们在内存中的显示顺序.

也许这张图片更有帮助:http: //img140.imageshack.us/i/drawing2.png/

有没有可以进行这种合并的算法(最好是快速算法)?也许这有点帮助:

  • 列表的起始节点总是在其他节点之前.
  • 一个列表最多可以有8192个节点.
  • 我知道节点在内存中的位置,因为列表跟踪大块内存中的空闲位置(在内存分配器中使用).
  • 我在C++工作.

提前致谢!

Eva*_*ran 6

好吧,听起来你没有使用std::list,所以我会选择通用的解决方案.由于您的要求是合并列表,但是节点的顺序是内存中的物理位置.您可以只追加两个列表,然后按节点的地址对节点进行排序.

请参阅:http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html,了解链接列表的排序算法.

在排序时,而不是node1->value < node2->value仅仅比较(size_t)node1 < (size_t)node2,或者某种性质.