Linked List Cycle II
A cycle exists when repeated traversal through next reaches an earlier node. In the examples, pos identifies the zero-based node connected to tail, or -1 when no cycle exists; it is not an input parameter.
Return the cycle's entry node without modifying the list.
Example 1:
Input: head = [3,2,0,-4], pos = 1 Output: tail connects to node index 1 Explanation: The tail reconnects at the second node, index 1. Example 2:
Input: head = [1,2], pos = 0 Output: tail connects to node index 0 Explanation: The tail reconnects at the first node, index 0. Example 3:
Input: head = [1], pos = -1 Output: no cycle Explanation: The tail does not reconnect to the list.
# Definition for singly-linked list.
class ListNode(object):
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution(object):
def detectCycle(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
h = {}
while head and head.next:
if head in h:
return h
h[head] = 0
head = head.next
# https://stackoverflow.com/questions/71569455/traverse-listnode-in-python
def createLinkedList(values):
h = None
for val in reversed(values):
h = ListNode(val, h)
return h
l = createLinkedList([3, 2, 0, -4, 2, 5])
s = Solution()
s.detectCycle(l)