我有一个链接列表,其中包含从0到1的数字,我的任务是从此列表中删除给定范围(x,y)中的数字。您是否知道如何以合理的复杂性解决该问题?
答案 0 :(得分:4)
让我们首先考虑一下LinkedList
的结构。让我们看看下面的图片:
(双重)链表中的每个元素都有一个指向下一个(和前一个)元素的指针。 Java类LinkedList
例如是双向链表。
在这样的列表中,没有直接访问“给我元素B的索引 ”。我们只有head
引用(指向列表的开头)和tail
引用(指向结尾)。要找到元素B ,我们需要从head
(或tail
)开始,并按照next
(或{{}完全遍历整个列表1}})元素的指针,直到找到元素B 。
因此,回到您的问题,没有有效的方法可以从prev
中删除range(x, y)
的元素。这只能在排序结构中有效,例如LinkedList
或排序PriorityQueue
(二进制搜索产生ArrayList
)或者可以直接访问O(log(n)
之类的元素。 1}}例如。
以下是 Java 中的代码段,它解决了HashSet
的任务,但是,如上所述,它效率不高,运行时间为LinkedList
(我们需要查看每个元素以找出需要删除的元素):
O(n)
答案 1 :(得分:-2)
如果你考虑一下,linkedlist没有方法getAtIndex。你只能从Head开始,然后按照自己的方式前进到尾部,反之亦然。这种复杂性将是O(n)