python
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def detectCycle(self, head: Optional[ListNode]) -> Optional[ListNode]:
# 思路是使用set,如果这个节点在set出现过,记录这个节点,并循环出这个节点的下标
if head is None or head.next is None:
return None
visited=set()
index=0
while head:
if head in visited:
mynode=head
return mynode
visited.add(head)
head=head.next
return None
思路:
- 跟环形链表1不同的是,这道题需要返回的值是成环的第一个元素
- 所以选择set记录每一个节点,set的本质是哈希表,查询时间复杂度是O(1)