根据这个网站,我很难理解为什么链接列表的时间复杂性是O(1)。据我所知,如果你想删除一个元素,你肯定必须遍历列表才能找到元素的位置(如果它真的存在的话)?根据我的理解,它不应该是O(n)吗?还是我完全错过了什么?
不,您没有遗漏什么。
如果要删除特定元素,时间复杂度为O(n)
(其中n
是元素的数量),因为必须首先找到该元素。
如果要删除特定索引i
处的元素,则时间复杂性为O(i)
,因为必须从一开始就遵循链接。
如果已经有了要插入的节点的引用,则插入的时间复杂度仅为O(1)
。如果您已经有要删除的节点的引用,则对于双链表,删除的时间复杂度仅为O(1)
。如果您已经引用了要删除的节点和之前的节点,则只有O(1)
才能删除单链表。所有这些都与基于数组的列表形成对比,在该列表中,插入和删除都是O(n)
,因为您必须移动元素。
使用链表而不是基于数组的列表的优点是,在对其进行迭代时,可以有效地插入或删除元素。例如,这意味着筛选链表比基于数组筛选列表更有效。
您是正确的。
删除:
1.如果在这种情况下给出指针,则时间复杂度为O(1)。
2.您没有指向要删除的节点的指针(搜索和删除)。在这种情况下,时间复杂度为O(n)。