双链表中最后一个元素的删除复杂度

时间:2019-02-11 04:02:46

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

enter image description here

如果要删除节点A ,则只需要遍历一个节点,复杂度就会 O(1)

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

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

我不明白这是怎么回事?

我检查了此链接,但没有得到/不理解我的回答 Link

2 个答案:

答案 0 :(得分:0)

复杂性不是删除项目,而是定位

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

如果有人要您删除列表的第k th 个元素,则必须从头开始并遍历k个链接以找到该元素,然后才能将其删除。那将是O(k),在最坏的情况下将是O(n-1)。

答案 1 :(得分:0)

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