Problem of the day
You are given a singly linked list that may or may not contain a cycle. You are supposed to return the node where the cycle begins, if a cycle exists, else return 'NULL'.
A cycle occurs when a node's next pointer returns to a previous node in the list.
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.
1 2 3 4 -1
1
1
For the first test case,
1 2 3 4 -1
0
0
For the first test case,
Can you do this in O(n) time and using constant space?
-10^4 <= n <= 10^4
-1 <= pos < n
-10^9 <= data <= 10^9 and data != -1
Time Limit: 1 sec
Think of checking each node as the starting point for the cycle.
The basic idea of this approach is to check each node as the starting point for the cycle.
Now consider the following steps:
O(N ^ 2), where ‘N’ is the total number of nodes.
For every iteration of the outer loop, we are iterating the linked list again. So the overall time complexity will be O(N^2).
O(1)
We are using constant extra space. Hence, the overall space complexity is O(1).