Linked List Cycle
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:

Input: head = [3,2,0,-4], pos = 1
Output: true
Explanation: There is a cycle in the linked list, where the tail connects to the 1st node (0-indexed).Example 2:

Input: head = [1,2], pos = 0
Output: true
Explanation: There is a cycle in the linked list, where the tail connects to the 0th node.Example 3:

Input: head = [1], pos = -1
Output: false
Explanation: There is no cycle in the linked list.
Constraints:
The number of the nodes in the list is in the range
[0, 104].-105 <= Node.val <= 105posis-1or 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
slowandfast: Theslowpointer moves one step at a time, while thefastpointer moves two steps at a time.Detect cycle: Traverse the list with the
slowandfastpointers. If a cycle exists, thefastpointer will eventually catch up to theslowpointer (i.e., they will point to the same node). If thefastpointer reaches the end of the list, then no cycle exists.Return result: If the
slowandfastpointers meet, then a cycle exists, so returntrue. Otherwise, returnfalse.
/**
* Definition for singly-linked list.
* public class ListNode {
* public int val;
* public ListNode next;
* public ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public bool HasCycle(ListNode head) {
if (head == null || head.next == null)
{
return false;
}
var slow = head;
var fast = head.next;
while (slow != fast)
{
if (fast == null || fast.next == null)
{
return false;
}
slow = slow.next;
fast = fast.next.next;
}
return slow == fast;
}
}Complexity
Time Complexity: O(N)
Space Complexity: O(1)
Last updated