如何插入单链表和双链表常量时间?

时间:2015-09-06 03:15:36

标签: time-complexity singly-linked-list

考虑到这一点,我认为插入和搜索任何数据结构的时间复杂度应该相同,因为要插入,首先必须搜索要插入的位置,然后必须插入。 / p>

根据这里:http://bigocheatsheet.com/,对于链表,搜索是线性时间,但插入是恒定时间。我理解搜索是如何线性的(从前面开始,然后一个接一个地继续浏览链表上的节点,直到找到你要搜索的内容),但是如何插入常量时间?

假设我有这个链表:

1 -> 5 -> 8 -> 10 -> 8

我希望在数字8之后插入数字2,然后我必须首先搜索数字8(搜索是线性时间),然后再采取额外的2步来插入它(因此,插入仍然是线性时间?)?

#insert y after x in python 
def insert_after(x, y):
    search_for(y)
    y.next = x.next
    x.next = y

编辑:即使对于双向链表,也不应该首先搜索节点(这是线性时间),然后插入?

2 个答案:

答案 0 :(得分:4)

因此,如果您已经有对要插入的节点的引用,那么它是O(1)。否则,它是search_time + O(1)。这有点误导,但on wikipedia有一个图表说明它更好一点: enter image description here

将此与动态数组进行对比,如果要在开头插入,则为:Θ(n)

仅供强调:您引用的网站指的是插入的实际行为,因为我们已经知道要插入的位置。

答案 1 :(得分:1)

插入时间=设置三个指针的时间= O(3)=恒定时间。

插入数据的时间与在特定位置插入数据的时间不同。要求的时间是仅插入数据的时间。