python怎么实现环形链表
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,本篇内容介绍了"python怎么实现环形链表"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!【题目】给
千家信息网最后更新 2025年12月02日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安全错误
数据库的锁怎样保障安全
贵阳龙芯服务器报价
上海net软件开发定制
融媒体中心网络技术岗
中国网络安全发布会
ar1作为telnet服务器
泰安市网络安全委员会
聊城手机软件开发哪家便宜
网络技术三级题目组成
方舟服务器晚上怎么没了
德国电商行业数据库
工行软件开发部门
分区助手服务器版 绿色
违反网络安全法第四十七条怎么罚
网络安全是否重要
选择计算机网络技术的认知
网吧服务器和虚拟硬盘
数据服务器连接失败
新型电力系统网络安全方向
数据库属于一次文献
开源软件邮件服务器搭建
k8s 服务器基本配置
自建服务器集群
数据库工作岗位浪潮
手机病毒库数据库查询
三调数据库中只有表格
普通内存比服务器内存快
node怎么连接mdb数据库
郴州市政府网络安全
无线网络技术在国内外的发展
数字峰会网络安全保卫工作