当前位置: 首页 > wzjs >正文

泉州专业制作网站开发微信公众号平台官网

泉州专业制作网站开发,微信公众号平台官网,各大网站头条,网站怎么做自然优化力扣原题链接: 141. 环形链表 - 力扣(LeetCode) 哈希表 检测环形链表, 直观的思路就是使用哈希表, 遍历这个链表, 将访问过的节点加入到哈希表中, 如果遍历过程中发现节点已经存在于哈希表中, 则说明链表有环. 复杂度分析: 时间复杂度: O(N), 最坏情…

力扣原题链接: 141. 环形链表 - 力扣(LeetCode)

哈希表

检测环形链表, 直观的思路就是使用哈希表, 遍历这个链表, 将访问过的节点加入到哈希表中, 如果遍历过程中发现节点已经存在于哈希表中, 则说明链表有环.

复杂度分析:

  • 时间复杂度: O(N), 最坏情况下需要遍历所有节点.
  • 空间复杂度: O(N), 最坏情况下每个节点都会加入到哈希表.

Floyd判圈算法

另一种更高效的算法是Floyd判圈算法, 又称龟兔赛跑算法, 该算法由计算机科学家罗伯特·弗洛伊德(Robert W. Floyd)提出, 其核心思想是通过两个指针以不同速度遍历链表来判断是否存在环, 并可以进一步确定环的起点和长度.

算法步骤

初始化两个指针:

  • 慢指针: 每次移动一步
  • 快指针: 每次移动两步

两个指针同时从起点出发, 按照各自的速度移动.

判断是否有环:

  • 如果快指针会先到达终点, 则说明链表无环
  • 如果快慢指针相遇, 则说明链表有环

 

动画演示

欢迎关注公众号: 算法铁金库

持续更新数据结构与算法, 动画演示, 理解算法快人一步~

Java代码:

public class Solution {public boolean hasCycle(ListNode head) {if (head == null) {return false;}ListNode slow = head;ListNode fast = head;do {slow = slow.next;if (fast.next != null && fast.next.next != null) {fast = fast.next.next;} else {return false;}} while (slow != fast);return true;}
}

 

复杂度分析:

  • 时间复杂度: O(N), 慢指针对每个节点至多访问一次, 快指针访问的节点个数不超过慢指针的2倍.
  • 空间复杂度: O(1), 只需要两个额外指针.

 

思考: 为什么当链表有环, 快慢指针一定能相遇?

如果存在环, 快指针每次比慢指针多走一步, 也就是说距离每次减1, 所以最终一定能相遇.

扩展应用

确定环的起点

当快慢指针首次相遇后, 将其中一个指针移回起点(如慢指针), 然后两个指针改为每次均移动一步. 当它们再次相遇时, 相遇点即为环的起点.

 

证明:

用a表示链表头到环起点的距离

用L表示环的长度

第一阶段: 寻找相遇点

  • 当慢指针走了a步到达环起点时, 快指针已经走了2a步
  • 快指针在环中的位置是 (2a - a) % L = a % L (因为前a步用来走到环起点)
  • 此时快指针需要追赶慢指针, 相对距离是 L - a % L
  • 由于快指针每次比慢指针多走1步, 经过 L - a % L 步后两者相遇
  • L - a % L 就是慢指针在环中移动的长度, 也就是相遇位置距环起点的距离

第二阶段: 确定环起点

  • 将慢指针移回链表头部, 快指针不动, 接下来两个指针每次各走1步
  • 慢指针走了a步到达环起点, 同时快指针也走了a步, 在环中的位置为 L - a % L + a
  • 而 (L - a % L + a) % L = 0, 也就是说该位置就是环起点.

证毕.

计算环的长度

在确定有环后, 固定一个指针, 另一个指针继续移动并计数, 直到再次相遇, 计数结果即为环的长度.

 

 

http://www.dtcms.com/wzjs/422484.html

相关文章:

  • 网站建设医药免费下载百度seo
  • 设计网站公司力荐亿企邦优化方案
  • 网站建设租房网模块重庆高端seo
  • 浙江建设图片优化网站
  • 济宁市中网站建设网站推广内容
  • 医疗行业企业网站建设公众号排名优化
  • 淄博微信网站制作免费的推广引流软件
  • 做彩票类网站用什么服务器企业查询信息平台
  • 天津网站seo营销模板企业产品推广运营公司
  • 网站顶部图片素材销售外包公司
  • 高淳做网站价格网站建设制作专业
  • 零售客户电商网站登录桂林网站设计
  • 企业网站建设的背景搜索引擎优化是指
  • 手机网站模板百度竞价推广后台
  • 网站开发注意问题企业网站设计规范
  • 网络推广建议余姚seo智能优化
  • php如何做网站永久免费linux服务器
  • 河池网站开发工程师招聘网百度网盘资源搜索引擎搜索
  • 最好的汽车科技网站建设广东公共广告20120708
  • 网站建设销售业绩任务网络推广外包内容
  • 网站建设菜鸟教程seo是广告投放吗
  • 网站建设孝感肇庆seo排名
  • 网站建设报价表格nba在线直播免费观看直播
  • 园林公司网站模板杭州网站建设书生商友
  • 两颗米随州网站建设网络营销的优势有哪些?
  • b2b网站备案色盲悖论
  • 扬州做网站的公司哪个好seo公司 引擎
  • 电影网站建设需要什么软件宁波seo教程网
  • 网站广告位天津百度推广代理商
  • 做同城网站seo资料站