当我们确定时间复杂度时,我们总是考虑最坏的情况。那么为什么我们不假设在单个链表中删除的最坏情况(不知道值在哪里,因此需要遍历整个链表)???
我将此作为真相来源" lodash docs
例如,数组中的删除被认为是O(n),因为如果我们删除第一个项目,那么我们将需要重新分配数组中每个其他项目的索引。如果我们只是删除数组中的最后一项,那么它将是恒定的时间。但我们假设最坏的情况,这是有道理的。
那么为什么我们不对链表做同样的事情,并假设最坏的情况呢?在这种情况下,在我看来它应该是O(n)对吗?
答案 0 :(得分:2)
从链接列表中删除意味着您知道删除了哪个元素。而您所做的就是将此元素的引用重新分配给下一个元素。因此,该操作是O(1)。 当然,链表中的搜索是O(n)以及数组。但是在数组中,即使你知道你的元素,你必须在那之后重新分配所有元素。