Skip to content

Latest commit

 

History

History

LinkedListCycle2

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

README.md

Linked List Cycle II(环形链表 II)

LeetCode 142

题目

给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。

为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。

说明:不允许修改给定的链表。

示例 1:

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

示例 2:

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

示例 3:

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

进阶: 你是否可以不用额外空间解决此题?

思路

点击展开 快慢指针找到相遇点;快指针指回链表头部,慢指针指向相遇点,每次将它们向前移动一步,直到再次相遇,相遇点就是环的入口。

说明:

设链表头部到环的入口长度为a,环的长度为b,环的入口到相遇点的长度为c:则f=2s=s+nb,s=nb=a+c+(n-1)b,b=a+c,即慢指针从相遇点继续前进a步就是环的入口。

代码实现

C C++ Java Objective-C Swift Python JavaScript Go PHP
🤔 😀 🤔 🤔 🤔 😀 🤔 🤔 🤔