Why does linked list delete and insert operation have complexity of O(1) ? shouldn't it be of O(n)

后端 未结 5 1982
情歌与酒
情歌与酒 2021-02-04 03:00

It is said that the complexity of the LinkedList remove and the add operation is of O(1). and in case of ArrayList it is of O(n).

5条回答
  •  粉色の甜心
    2021-02-04 03:23

    The complexity of removing is considered that you already have the pointer to the right position of the element you want to remove...

    Is not considered the cost you took for finding it

    Information on this topic is now available on Wikipedia at: Search data structure
    
        +----------------------+----------+------------+----------+--------------+
        |                      |  Insert  |   Delete   |  Search  | Space Usage  |
        +----------------------+----------+------------+----------+--------------+
        | Unsorted array       | O(1)     | O(1)       | O(n)     | O(n)         |
        | Value-indexed array  | O(1)     | O(1)       | O(1)     | O(n)         |
        | Sorted array         | O(n)     | O(n)       | O(log n) | O(n)         |
        | Unsorted linked list | O(1)*    | O(1)*      | O(n)     | O(n)         |
        | Sorted linked list   | O(n)*    | O(1)*      | O(n)     | O(n)         |
        | Balanced binary tree | O(log n) | O(log n)   | O(log n) | O(n)         |
        | Heap                 | O(log n) | O(log n)** | O(n)     | O(n)         |
        | Hash table           | O(1)     | O(1)       | O(1)     | O(n)         |
        +----------------------+----------+------------+----------+--------------+
    
     * The cost to add or delete an element into a known location in the list (i.e. if you have an iterator to the location) is O(1). If you don't know the location, then you need to traverse the list to the location of deletion/insertion, which takes O(n) time. 
    ** The deletion cost is O(log n) for the minimum or maximum, O(n) for an arbitrary element.
    

提交回复
热议问题