有1000个数字的列表是否有要删除的第500个元素,要使用数组或链表的数据结构,为什么?
答案 0 :(得分:0)
在链接列表中的删除:
最简单的方法是删除第一个节点,因为您有指向第一个节点的指针。 因此,将指针指向需要花费 O(1)时间的第二个节点。
但是,删除其他任何节点将分两步进行:
第1步。到达要删除的节点。为此,我们必须逐个扫描每个节点,直到到达该节点为止(无随机访问)。这将花费 O(n)时间。
第二步。找到它之后,我们需要从列表中将其分离。这将花费 O(1)时间。
所以总时间= O(1)+ O(n)。
数组中的删除
数组中任何节点的删除总是相同的。没有特殊情况。
第1步。首先,您访问array元素,这需要 O(1)时间。
第二步。然后,您可以通过将所有其他元素向后移动一个位置来将其删除。这需要 O(n)时间。
总时间= O(1)+ O(n)。
因此,删除数组中的第一个元素会比删除链表中的第一个元素花费更多。
在所有其他情况下,无意,删除数组和链接列表的代价均应相同。 但是,如果我们实际计算时间,我认为与数组相比,链表中的删除/插入速度更快。