In the given linked list, there is a cycle starting at position 0, hence we return 0.
The first line contains the elements of the singly linked list separated by a single space and terminated by -1; hence, -1 would never be a list element.
The second line contains the integer position 'pos', which represents the position (0-indexed) in the linked list where the tail connects to. If 'pos' is -1, then there is no cycle in the linked list.
For each test case, print the integer position 'pos' which represents the position of (0-indexed) in the linked list which is the first node of the cycle. Print -1 if there is no cycle in the linked list.
You are not required to print the expected output; it has already been handled. Just implement the function.
The basic idea of this approach is to check each node as the starting point for the cycle.
Now consider the following steps:
We are going to maintain a lookup table(a HashSet) that basically tells if we have already visited a node or not, during the course of traversal.
The basic idea of this approach is to use the technique based on two-pointers (slow and fast). Slow pointer takes a single jump and corresponding to every jump slow pointers take, fast pointer takes two jumps. If there exists a cycle, both slow and fast pointers will reach the exact same node. If there is no cycle in the given linked list, then the fast pointer will reach the end of the linked list well before the slow pointer reaches the end or null.
To get the starting point of the loop we can start moving both pointers again at the same speed such that one pointer (say slow) begins from the head node of the linked list and other pointers (say fast) begins from the meeting point. This time both the pointers will necessarily meet at the starting point of the loop.
You can refer to this article for more details. https://www.codingninjas.com/blog/2020/09/09/floyds-cycle-detection-algorithm/
Now consider the following steps:
Deletion In Doubly Linked List
Deletion In Doubly Linked List
Insertion In Doubly Linked List
Insertion In Doubly Linked List
LRU Cache
Delete Nodes On Regular Intervals
Add One To Linked List