题目:
环形链表 II:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 说明:不允许修改给定的链表。
进阶:
你是否可以不用额外空间解决此题?
你是否可以不用额外空间解决此题?
思路:
环形链表的常用阶梯思路,使用快慢指针,快指针是慢指针速度的两倍,然后寻找是否成环,成环之后将快指针放到原地,将慢指针重回开始位置,按照正常的速度进行寻找,可以找到成环点。
程序:
# 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:
if not head:
return None
if not head.next:
return None
index1 = head
index2 = head
while index2 and index2.next:
index1 = index1.next
index2 = index2.next.next
if index1 == index2:
break
if index1 != index2:
return None
index1 = head
while index1 != index2:
index1 = index1.next
index2 = index2.next
return index1