面试题-链表

什么是链表?

链表是一种物理上非连续的逻辑存储结构,每个节点有指针域和数据域,指针域存储该节点逻辑上的下一个节点,数据域存储该节点的数据。

给定单链表的头指针,如何判断是否有环?
  • 方法一:从头遍历,将每个遍历的节点存储到一个集合中,
  • 方法二:使用两个指针从头开始遍历,在一个循环中移动两个指针,指针1每次移动一步,指针2每次移动两步,每次比较两个指针指向的节点是否相同,如果指针2无法再向前移动,说明达到最后一个元素,链 表没有环。否则,一定会出现指针2和指针1相遇的情况,如果出现两个指针指向节点相同,说明链表中存在环。
  • 时间复杂度O(n)
如何判断两条单链表是否有交叉?
  • 用两个指针交替遍历两条链表,每次遍历都存储各自遍历的节点,并判断当前节点是否在两个指针遍历的节点的集合中,如果出现一个指针遍历的节点在另一个指针对应集合中,则判断出现交叉,交叉点就是当前节点
  • 时间辅助度O(m+n),空间复杂度:O(m+n)
单链表有什么优缺点
  • 优点:链表长度可变,内存可以不连续从而利用率高,删除和插入效率高
  • 缺点:无法随机查找,凡是涉及查找的操作复杂度都是O(n)
链表和数组的对比
  • 数组长度固定,链表长度可变
  • 数组内存是连续的,链表物理内存可以不连续
  • 数组随机访问元素效率高,链表随机访问效率低,必须从头遍历
  • 数组删除、插入元素效率低,链表删除、插入元素效率高
链表随机删除一个给定元素复杂度是多少?

给定元素和给定序号,不同。

  • 单链表:O(n),查找O(n),修改指针O(1)
  • 双链表:O(1)
链表删除一个给定序号的元素复杂度是多少?

给定序号,无论是单链表还是双链表,都需要从头遍历找到对应序号的元素。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值