python怎么实现环形链表
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容介绍了"python怎么实现环形链表"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!【题目】给
千家信息网最后更新 2026年11月01日python怎么实现环形链表
本篇内容介绍了"python怎么实现环形链表"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
【题目】
给定一个链表,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
如果链表中存在环,则返回 true 。否则,返回 false 。
进阶:
你能用 O(1)(即,常量)内存解决此问题吗?
示例 1:
输入:head = [3,2,0,-4], pos = 1 输出:true 解释:链表中有一个环,其尾部连接到第二个节点。
示例 2:
输入:head = [1,2], pos = 0 输出:true 解释:链表中有一个环,其尾部连接到第一个节点。
示例 3:
输入:head = [1], pos = -1 输出:false 解释:链表中没有环。
提示:
· 链表中节点的数目范围是 [0, 104] · -105 <= Node.val <= 105 · pos 为 -1 或者链表中的一个 有效索引 。
【思路】
设置快慢指针,快指针每次前进两步,慢指针每次前进一步,那么只要链表有环,两指针肯定会相遇。
【代码】
python版本
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def hasCycle(self, head: ListNode) -> bool:
# 快指针前进两步,满指针前进一步
# 如果有环,肯定会相遇
fast, slow = head, head
while fast:
# 指针前移
if fast and fast.next:
fast = fast.next.next
slow = slow.next
else:
return False
# 相遇
if fast == slow:
return True
return False【相似题目】
142. 环形链表 II
解题思路:
慢指针前进步数:step = a + b + n * c (a为进环前的元素数;b为剩余的步数,c为环的元素数)
快指针前进步数:2 * step = a + b + m * c (m > n,m - n为快指针相对于慢指针多走了多少圈)
环的起点位置,对应前进步数为a,那么:a = (m - 2n) * c - b
进一步得到:a = (m - 2n + 1) * c + (c - b)
那么,慢指针回到head,两指针都每次只移动一步,那么在此相遇点就是环的起点代码:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def detectCycle(self, head: ListNode) -> ListNode:
# 找到相遇点
fast, slow = head, head
flag = False # 没有环
while fast:
if fast and fast.next:
fast = fast.next.next
slow = slow.next
else:
break
if fast == slow:
flag = True
break
if not flag:
return None
# step = a + b + n * c (a为进环前的元素数;b为剩余的步数,c为环的元素数)
# 2 * step = a + b + m * c (m > n,m - n为快指针相对于慢指针多走了多少圈)
# ==> a = (m - 2n) * c - b
# a = (m - 2n + 1) * c + (c - b)
# 慢指针回到head,两指针都每次只移动一步,那么在此相遇点就是环的起点
slow = head
while fast != slow:
fast = fast.next
slow = slow.next
return fast
"python怎么实现环形链表"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
指针
步数
元素
节点
输出
环形
示例
起点
进一
解释
输入
代码
位置
内容
实际
就是
尾部
思路
情况
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
哈尔滨大商圈互联网科技有限公司
河南云网互联网络科技有限公司
国智互联网科技
银优互联网科技有限公司
猫创互联网科技
国外互联网科技网站
互联网科技项目计划书材料类
互联网为啥属于高科技
中国航天科技大学国际工业互联网
开一家科技互联网公司需要多少钱
乌苏新华互联网科技做什么的
民营互联网公司国防科技
济南有互联网科技公司吗
互联网科技圈年度人物
卡尔迅互联网科技有限公司
广州梦谷互联网科技有限公司领导
张家口科技产业互联网平台
现代科技的标志之一的互联网
六子台科技互联网展会
武汉亿视互联网科技有限公司
新华互联网科技学院
互联网高科技企业
互联网养老 桔豆科技
开启互联网科技时代小说
互联网金融科技展
互联网科技的全部知识
张召忠谈中国互联网科技
中国互联网公司的科技投入
互联网科技品牌
科技互联网专业务虚会材料