当前位置:网站首页>链表 | 环形链表 | leecode刷题笔记
链表 | 环形链表 | leecode刷题笔记
2022-08-06 12:02:00 【Begonia_cat】
跟随carl代码随想录刷题
语言:python
142. 中等环形链表 II
题目:给定一个链表的头节点 head ,
返回链表开始入环的第一个节点。如果链表无环,则返回 null。
.
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
.
不允许修改 链表。
题目解析
思路很巧妙:
定义一个指针
fast,初始位置为head,每次移动2步
定义一个指针slow,初始位置为head,每次移动1步
如果fast和slow相遇了,则有环,否则无环定义一个指针
index1,初始位置为fast和slow的相遇节点,每次移动1步
定义一个指针index2,初始位置为head,每次移动1步
当index1 == index2时,该位置就是入环点
详情查看代码随想录思路讲解。
️当链表中的元素个数≥2时(即:当head和head.next都存在时),才有可能存在环。
️用代码语言表述就是:cur=head, while(cur and cur.next):
完整代码如下
# 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 = head
slow = head
# 空链表与只有一个元素的链表一定没有环
# 当链表中的元素大于等于2时,遍历查看是否有环
while fast and fast.next: # 如果fast.next和fast.next.next存在
fast = fast.next.next
slow = slow.next
if fast == slow:
index1 = fast
index2 = head
while(index1 != index2):
index1 = index1.next
index2 = index2.next
return index1
return None
边栏推荐
猜你喜欢
随机推荐
实践|美创助力“云学堂”数据安全风险管控建设
d find the function in the package
NC2 rearrangement linked list
Kubernetes 污点和容忍
How to find stills?Where can I get HD resources?It's too late to meet these 9 website channels!original
【SSL集训DAY1】C【暴力】【数学】
Office宏上线Cobalstrike
在常州“超级虚拟工厂”,中国智造正在“原力觉醒”
Draw timing diagrams with code!YYDS
如何成为一名获得Adobe认证的专业人员?
LeetCode 1403. 非递增顺序的最小子序列
STM32 startup process - startup_xxxx.s file analysis (MDK and GCC dual environment)
MySQL数据库安装步骤(图文)
不安装运行时运行 .NET 程序
A domestic placeholder service
PG核心技术篇--表中系统字段
机器学习实战-梯度下降法在线性回归模型中的使用
IPv6地址规划
机器学习实战-手写数字图片分类预测
【云原生 · Kubernetes】Kubernetes容器云平台部署与运维









