【问题标题】:Deletion complexity of last element in double linked list双链表中最后一个元素的删除复杂度
【发布时间】:2019-02-11 04:02:45
【问题描述】:

如果你想删除节点A,那么你只需要遍历一个,复杂度将O(1)

如果要删除节点C,则必须遍历两次,复杂度将O(n)

如果要删除Node D,则需要遍历3次,复杂度可能为O(n) 但是,双链表中最后一个节点的删除复杂度是O(1)

我不明白它是如何工作的?

我检查了这个链接,但我没有得到/不明白我的答案 Link

【问题讨论】:

  • Big-O 复杂性仅在您谈论可以任意大的输入时才会发挥作用。你是在问这个图吗?或者关于这种一般形状的东西? (顺便说一句,这就是你链接的我的答案。很高兴澄清事情。)
  • 我想解释一下最后一个节点删除的复杂性。请解释一下给定图像案例和大型数据集案例。
  • 从图中您似乎无法访问尾指针,这意味着删除节点 D 应该是 O(n)
  • @Barış Akkurt 所以如果提到尾指针,那么复杂度会是 O(1)。 ?(在最后一个节点删除的情况下)

标签: data-structures time-complexity doubly-linked-list discrete-mathematics


【解决方案1】:

复杂性不在于移除项目,而在于定位它。

在双向链表中,您通常有一个指向列表中最后一个元素的指针,以便您可以追加。因此,如果有人要求您删除最后一个元素,您只需将其删除即可。

如果有人要求你删除列表中的第 kth 个元素,你必须从头开始遍历 k 个链接找到该元素,然后才能删除它。这将是 O(k),在最坏的情况下是 O(n-1)。

【讨论】:

    【解决方案2】:

    只有从双向链表中删除最后一个节点的复杂度为 O(1) 的情况是当您可以直接访问该节点时,例如尾指针。否则你将不得不遍历整个列表,这需要 O(n)。

    【讨论】:

      猜你喜欢
      • 2011-09-03
      • 1970-01-01
      • 2015-06-29
      • 2010-10-22
      • 1970-01-01
      • 2018-09-11
      • 1970-01-01
      • 2020-01-28
      • 1970-01-01
      相关资源
      最近更新 更多