Linked List Cycle
Last updated
Last updated
Linked List, tortoise and the hare approach
Given head
, the head of a linked list, determine if the linked list has a cycle in it.
There is a cycle in a linked list if there is some node in the list that can be reached again by continuously following the next
pointer. Internally, pos
is used to denote the index of the node that tail's next
pointer is connected to. Note that pos
is not passed as a parameter.
Return true
if there is a cycle in the linked list. Otherwise, return false
.
Example 1:
Example 2:
Example 3:
Constraints:
The number of the nodes in the list is in the range [0, 104]
.
-105 <= Node.val <= 105
pos
is -1
or a valid index in the linked-list.
This is a method for detecting a cycle in a singly-linked list using the Floyd’s cycle-finding algorithm, also known as the tortoise and the hare algorithm.
Steps
Check for empty or single node list: If the list is empty or only contains a single node, it cannot contain a cycle, so return false
.
Initialize two pointers slow
and fast
: The slow
pointer moves one step at a time, while the fast
pointer moves two steps at a time.
Detect cycle: Traverse the list with the slow
and fast
pointers. If a cycle exists, the fast
pointer will eventually catch up to the slow
pointer (i.e., they will point to the same node). If the fast
pointer reaches the end of the list, then no cycle exists.
Return result: If the slow
and fast
pointers meet, then a cycle exists, so return true
. Otherwise, return false
.
Complexity
Time Complexity: O(N)
Space Complexity: O(1)