我对有关未分类链接列表的特定问题感到好奇。假设我们有一个基于数组实现的未排序链表。从列表中心删除元素时,保持元素的当前顺序是否重要或有利?那个洞必须被填充,所以我们假设我们取出列表中的最后一个元素并将其插入该洞。移动所有元素的时间复杂度是否大于移动单个元素?
答案 0 :(得分:2)
您可以从链接列表中删除项目而不会留下任何漏洞。
链表不表示为连续元素数组。相反,它是一系列带链接的元素。您可以仅通过在恒定时间操作中将其相邻元素相互链接来移除元素。
现在,如果你有一个基于数组的列表,,你可以选择通过将最后一个元素移动到位来实现元素的删除。这将给你O(1)删除而不是O(n)删除。但是,您可能希望记录此行为。
移动所有元素的时间复杂度是否大于移动单个元素?
是的,对于基于数组的列表。移动所有后续元素是O(n),移动单个元素是O(1)。
如果您的列表是java.util.List的实现,请注意,Java列表被定义为 ordered 集合,而List.remove(int index)方法是已定义转移剩余的元素。
答案 1 :(得分:1)
是的,使用数组实现,它将具有更大的时间复杂度,最高为n / 2(如果元素位于数组的中间),以便将所有内容移位。移动一个元素的时间是恒定的。
答案 2 :(得分:0)
由于您使用数组,答案是肯定的,因为您必须进行多次分配。
如果您使用节点,则在复杂性方面会更好。