【发布时间】:2009-06-16 14:56:04
【问题描述】:
我需要合并两个双向链表,但不是按它们的值(列表未排序)。 我想获得一个列表,其中包含两者中的所有节点,但按照它们在内存中出现的顺序。
也许这张图片有更多帮助: http://img140.imageshack.us/i/drawing2.png/
是否有任何算法(最好是快速算法)可以进行这种合并? 也许这有点帮助:
- 列表的起始节点总是在其他节点之前。
- 一个列表最多可以有 8192 个节点。
- 我知道节点在内存中的位置,因为列表会跟踪一大块内存中的空闲位置(用于内存分配器)。
- 我使用 C++ 工作。
提前致谢!
【问题讨论】:
-
您的要求使这听起来不像一个链表。为什么节点的上限?为什么要分配大块?
-
这是内存分配器的一部分。一块内存有 32KB,这个“列表”跟踪该块中哪些位置已被释放(一个用于由拥有该块的线程释放的对象,一个用于其他线程)。你是对的,这实际上不是链表。一个“节点”是一个32位的单个数字,下半部分表示Next,上半部分表示Previous,用距离block start的距离表示。因为block的地址是已知的,所以我不需要存储真正的指针并保存so空间很大。最大节点数为 32KB / 4 字节 = 8192 个节点。
标签: c++ data-structures linked-list