|环形链表

给你一个链表的头节点 head ,判断链表中是否有环。

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。

如果链表中存在环,则返回 true 。 否则,返回 false 。

输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。

输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。

输入:head = [1], pos = -1
输出:false
解释:链表中没有环。

| 题解

思路及算法
本方法需要读者对「Floyd 判圈算法」(又称龟兔赛跑算法)有所了解。
假想「乌龟」和「兔子」在链表上移动,「兔子」跑得快,「乌龟」跑得慢。当「乌龟」和「兔子」从链表上的同一个节点开始移动时,如果该链表中没有环,那么「兔子」将一直处于「乌龟」的前方;如果该链表中有环,那么「兔子」会先于「乌龟」进入环,并且一直在环内移动。等到「乌龟」进入环时,由于「兔子」的速度快,它一定会在某个时刻与乌龟相遇,即套了「乌龟」若干圈。
我们可以根据上述思路来解决本题。具体地,我们定义两个指针,一快一满。慢指针每次只移动一步,而快指针每次移动两步。初始时,慢指针在位置 head,而快指针在位置 head.next。这样一来,如果在移动的过程中,快指针反过来追上慢指针,就说明该链表为环形链表。否则快指针将到达链表尾部,该链表不为环形链表。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = Noneclass Solution:def hasCycle(self, head: ListNode) -> bool:# 如果链表为空或者只有一个节点 直接返回Falseif head is None or head.next is None:return False# 定义快慢指针fast = headslow = head# 先让快指针走一步fast = fast.nextwhile fast:# fast指针追上了slow指针 证明有环if fast == slow:return Trueelse:# 特殊情况处理,任何一个节点的next节点is None 都可以认为此链表无环if fast.next is None:return Falsefast = fast.next.nextslow = slow.nextreturn False

python 环形链表相关推荐

  1. python环形链表的使用

    文章目录 1 链表的建立 2 链表的遍历 3 环形链表的建立 4 环形链表的遍历 5 环形链表建立和遍历代码示例 1 链表的建立 # 首先定义一个链表 class linked_list_name:d ...

  2. c++ 怎样连接两个链表_LeetCode | 链表的入口,一文帮你搞定“环形链表”(python版,最简单解析)...

    链表节点的定义 链表作为一种数据结构,由链表节点互相连接构成. 链表节点包含自身的数据和一个指向下一节点的指针. """ Definition of ListNode & ...

  3. LeetCode 142. 环形链表 II - Python 快慢指针法+详解

    题目 142. 环形链表 II 难度中等761 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的 ...

  4. 刻意练习:LeetCode实战 -- Task09. 环形链表

    背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...

  5. LeetCode实战:环形链表

    题目英文 Given a linked list, determine if it has a cycle in it. To represent a cycle in the given linke ...

  6. LeetCode Python实现 链表简单部分

    LeetCode Python实现 链表简单部分 我以前完全没有写过关于链表的东西,node.val=node.next.val#当前值被后一个值覆盖node.next=node.next.next# ...

  7. 丢手帕java_java基于双向环形链表解决丢手帕问题的方法示例

    本文实例讲述了java基于双向环形链表解决丢手帕问题的方法.分享给大家供大家参考,具体如下: 问题:设编号为1.2--n的几个小孩围坐一圈,约定编号为k(1= 我们现在用一个双向环形链表来解这一问题. ...

  8. 基础数据结构【四】————环形链表与多项式

    主要演示环形列表节点的创建插入, 删除,遍历,环形链表连接 .双向链表节点的建立与插入 ,双向链表中节点的删除 以及环形链表在多项式中的应用 DEMO1:环形链表节点的创建与插入 /* [名称]:ch ...

  9. LeetCode实战:环形链表 II

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given a lin ...

最新文章

  1. c#打开数据库连接池的工作机制_数据库连接池-tomcat-jdbc使用笔记
  2. 机器学习训练中常见的问题和挑战
  3. STM32 基础系列教程 49 – Jansson
  4. MySQL-count(*) 和 not in 的查询优化
  5. linux 7 zip软件下载,linux安装使用7zip教程
  6. 这65条工作和成长建议,你将受用终生!
  7. 使用React和Spring Boot构建一个简单的CRUD应用
  8. Moment.js日期处理库的使用
  9. 网线重新插拔后恢复正常_生活小窍门之网线不够长怎么办,毕亚兹网线连接器轻松搞定...
  10. python3 logging com1_python-logging-基础(1)
  11. ubuntu安装 rust nightly_一起学Rust编程「1」:开发环境
  12. web前端基础知识-(六)jQuery-补
  13. C++中如何读取一个数的位数_初中数学:近似数和平均数知识点总结及练习
  14. android 开源项目介绍
  15. 单片机c语言音符发生,单片机C语言程序的设计实训100例基于8051Proteus仿真.doc
  16. Android人脸支付功能,OPPO Find X成为首款支持微信人脸支付的安卓手机
  17. 怎么把解压的文件在HTML打开,解决电脑rar压缩包文件怎么打开?教你正确打开方式...
  18. Ubuntu主机合盖子不休眠
  19. 大汇总 | 9种基于神经辐射场NeRF的SLAM方法你都知道吗?
  20. 获取gridview当前选中行的内容

热门文章

  1. 10. Leetcode 209. 长度最小的子数组 (数组-同向双指针-滑动窗口)
  2. R语言应用实战系列(五)-朴素贝叶斯算法以及ROC和PR曲线
  3. Win7系统下装Linux操作系统详细流程(图文)
  4. python杨辉三角_干货|杨辉三角与二项式定理
  5. Python入门100题 | 第079题
  6. Python入门100题 | 第027题
  7. 【Linux】5_进程管理
  8. LeetCode-剑指 Offer 28. 对称的二叉树
  9. LeetCode-动态规划基础题-509. 斐波那契数
  10. 第二周 数据分析之展示 Matplotlib基础绘图函数实例