Java链表的复杂度_java – 为什么链表删除和插入操作的复杂度为O(1)?不应该是O(n)...

据说LinkedList的复杂性删除和添加操作是O(1).在ArrayList的情况下,它是O(n).

计算大小为“M”的ArrayList:如果我想删除第N个位置的元素,那么我可以一次性使用索引直接进入第N个位置(我不必遍历直到第N个索引)然后我可以删除该元素,直到这一点,复杂度为O(1)然后我将不得不移动剩余的元素(MN移位),因此我的复杂性将是线性的,即O(MN 1).因此最后删除或插入会给我最好的表现(如N~M),并且在开始时删除或插入将是最差的(如N~1).

现在大小为“M”的LisnkedList:因为我们无法直接到达LinkedList中的第N个元素,要访问第N个元素,我们必须遍历N个元素,因此LinkedList中的搜索比ArrayList更昂贵…但删除在LinkedList的情况下,add操作被认为是O(1),因为在LinkedList中不涉及Shift,但是有涉及rigth的遍历操作?所以复杂度应该是O(n)的顺序,其中最差性能将在尾节点处,并且最佳性能将在头节点处.

任何人都可以解释一下为什么我们在计算LinkedList删除操作的复杂性时不考虑遍历成本?

所以我想了解它在java.util包中的工作原理.如果我想在C或C中实现相同,我将如何在LinkedList中实现随机删除和插入的O(1)?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值