AcWing 34. 链表中环的入口结点(python版)

题目描述

给定一个链表,若其中包含环,则输出环的入口节点。
若其中不包含环,则输出null。样例
给定如上所示的链表:
[1, 2, 3, 4, 5, 6]
2
注意,这里的2表示编号是2的节点,节点编号从0开始。所以编号是2的节点就是val等于3的节点。
则输出环的入口节点3.

思路

1、判断是否存在环
快指针一次走两步,慢指针一次走一步
若存在环,则两指针必会相遇
2、存在环后让慢指针回到起点
由于快指针比慢指针多走了k步,而这k步正好是环的长度,
设相遇点距环的起点的距离为 m,那么环的起点距头结点 head 的距离为 k - m,也就是说如果从 head 前进 k - m 步就能到达环起点。如果从相遇点继续前进 k - m 步,也恰好到达环起点。
所以可以让两指针以同样的速度前进,相遇点即为环的起点

代码实现

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         se
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值