在我的程序中,我计算了很多列表与单个项目的连接(即我经常执行“concatenate(someList, <single-sized list containing one item>)
”操作)。如何进行这些连接并尽可能快地迭代结果列表?
我考虑了两种实现,但可能会有更快的实现:
ListsConcatenation
(也具有List
的接口)中,该类保留对所有原始列表的引用,并将所有调用转发到相应的列表。这将导致连接的O(1)时间成本,但迭代的时间成本将变为O(n * log(n))。答案 0 :(得分:1)
通常在按从左到右的顺序填充列表时会弹出此要求。如果是这样,那么问题不是如何在O(1)时间内插入单个元素,而是如何在O( n )时间内插入 n 元素,以及简单的答案是从前到后构建列表并在最后反转它。
当然,我假设一些提供不可变数据类型的函数语言。如果您的数据类型是可变的,那么您可以简单地记住最后一个节点,并通过分配其next
指针来追加新元素。
答案 1 :(得分:0)
编写一个链接列表,其中包含指向结束节点的指针以及指向头部的指针。要在O(1)中连接列表,请取消引用要首先执行的列表的“结束”指针,并使该节点的“下一个”指针指向要追加的列表的头部。请记住更新结束点以指向附加列表的“结束”指针所引用的节点...