如果要删除节点A ,则只需要遍历一个节点,复杂度就会 O(1)
如果要删除节点C ,则必须遍历两次,复杂度将 O(n)
如果要删除节点D ,则必须遍历3次,复杂度可能为 O(n) 但是,双链表中最后一个节点的删除复杂度为 O(1)
我不明白这是怎么回事?
我检查了此链接,但没有得到/不理解我的回答 Link
答案 0 :(得分:0)
复杂性不是删除项目,而是定位。
在双向链接列表中,通常会有一个指向列表中最后一个元素的指针,以便可以追加。因此,如果有人要您删除最后一个元素,则可以将其删除。
如果有人要您删除列表的第k th 个元素,则必须从头开始并遍历k个链接以找到该元素,然后才能将其删除。那将是O(k),在最坏的情况下将是O(n-1)。
答案 1 :(得分:0)
只有从双链表中删除最后一个节点的复杂度为O(1)的情况是,您可以直接访问该节点,例如尾指针。否则,您将不得不遍历整个列表,该列表需要O(n)。