单链表插入时间复杂度分析

本文详细分析了单链表中添加元素的时间复杂度,包括在链表尾部、头部以及任意位置添加。总结指出,不同位置添加的时间复杂度不同,常见的错误观点是认为所有添加操作都是O(1)。在尾部添加需要O(n),头部添加为O(1),在任意位置则平均为O(n)。了解这些有助于优化链表操作的效率。
摘要由CSDN通过智能技术生成

链表通过指针将一组零散的内存块串联在一起。其中,我们把内存块称为链表的“结点”。为了将所有的结点串起来,每个链表的结点除了存储数据之外,还需要记录链上的下一个结点的地址。如图所示,我们把这个记录下个结点地址的指针叫作后继指针 next。
在这里插入图片描述
从我画的单链表图中,你应该可以发现,其中有两个结点是比较特殊的,它们分别是第一个结点和最后一个结点。我们习惯性地把第一个结点叫作头结点,把最后一个结点叫作尾结点。其中,头结点用来记录链表的基地址。有了它,我们就可以遍历得到整条链表。而尾结点特殊的地方是:指针不是指向下一个结点,而是指向一个空地址 NULL,表示这是链表上最后一个结点。

添加的时间复杂度

在链表尾部添加(addLast())需要从头遍历,时间复杂度为O(n)
在链表头部添加(addFirst()),时间复杂度为O(1)
在链表任意位置添加(add(int index,E e)),平均情况下为O(n/2)=O(n)

总结

  • 在不同的位置添加元素,时间复杂度是不一样的,并不都是O(1),好多文章这里的说法是错的

参考

单向链表基本操作的时间复杂度分析_枣面包的博客-CSDN博客_单链表时间复杂度总结

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值