Problem:
Given a linked list, return the node where the cycle begins. If there is no cycle, return null.
To represent a cycle in the given linked list, we use an integer pos which represents the position (0-indexed) in the linked list where tail connects to. If pos is -1, then there is no cycle in the linked list.
Note: Do not modify the linked list.
Example 1:
Input: head = [3,2,0,-4], pos = 1
Output: tail connects to node index 1
Explanation: There is a cycle in the linked list, where tail connects to the second node.
Example 2:
Input: head = [1,2], pos = 0
Output: tail connects to node index 0
Explanation: There is a cycle in the linked list, where tail connects to the first node.
Example 3:
Input: head = [1], pos = -1
Output: no cycle
Explanation: There is no cycle in the linked list.
Resource:LeetCode
Link:https://leetcode-cn.com/problems/linked-list-cycle-ii
Analysis:
At first,we define a list named ‘visited’;
Then,traverse the chain table from its head. For each notes,if it not in the ‘visited’ list,append it to the list and if it has exited in the list, then it is the one we want to find. The next step is to return the note.
Code:
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
class Solution(object):
def detectCycle(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
visited=[]
note=head
while note:
if note in visited:
return note
else:
visited.append(note)
note=note.next
return None