Linked List Cycle
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.
Solutions
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
andfast
: Theslow
pointer moves one step at a time, while thefast
pointer moves two steps at a time.Detect cycle: Traverse the list with the
slow
andfast
pointers. If a cycle exists, thefast
pointer will eventually catch up to theslow
pointer (i.e., they will point to the same node). If thefast
pointer reaches the end of the list, then no cycle exists.Return result: If the
slow
andfast
pointers meet, then a cycle exists, so returntrue
. Otherwise, returnfalse
.
Complexity
Time Complexity: O(N)
Space Complexity: O(1)
Last updated