快速连接列表

时间:2010-11-02 08:06:40

标签: performance data-structures

在我的程序中,我计算了很多列表与单个项目的连接(即我经常执行“concatenate(someList, <single-sized list containing one item>)”操作)。如何进行这些连接并尽可能快地迭代结果列表?

我考虑了两种实现,但可能会有更快的实现:

  • 通过将所有项目复制到结果列表来实现连接。这导致迭代的O(n)时间成本,但也导致连接的O(n)性能。
  • 将连接结果包装到新类ListsConcatenation(也具有List的接口)中,该类保留对所有原始列表的引用,并将所有调用转发到相应的列表。这将导致连接的O(1)时间成本,但迭代的时间成本将变为O(n * log(n))。

2 个答案:

答案 0 :(得分:1)

通常在按从左到右的顺序填充列表时会弹出此要求。如果是这样,那么问题不是如何在O(1)时间内插入单个元素,而是如何在O( n )时间内插入 n 元素,以及简单的答案是从前到后构建列表并在最后反转它。

当然,我假设一些提供不可变数据类型的函数语言。如果您的数据类型是可变的,那么您可以简单地记住最后一个节点,并通过分配其next指针来追加新元素。

答案 1 :(得分:0)

编写一个链接列表,其中包含指向结束节点的指针以及指向头部的指针。要在O(1)中连接列表,请取消引用要首先执行的列表的“结束”指针,并使该节点的“下一个”指针指向要追加的列表的头部。请记住更新结束点以指向附加列表的“结束”指针所引用的节点...