πDay 9. Remove loop in Linked List π§
The problem can be found at the following link: Problem Link
π‘ Problem Description:
You are given the head of a linked list that may contain a loop. A loop exists when the last node in the linked list connects back to a node in the same list. Your task is to remove the loop from the linked list (if it exists), ensuring the linked list remains intact.
Custom Input Format:
The input consists of:
A
headnode pointing to the start of a singly linked list.A
posvalue (1-based index) denoting the position of the node to which the last node points:If
pos = 0, it means the last node points tonull, indicating there is no loop.
Output:
The function returns true if:
No loop exists in the list, or
The loop is successfully removed, and the linked list is restored.
Otherwise, it returns false.
π Example Walkthrough:
Input:
head = 1 -> 3 -> 4, pos = 2
Output:
true
Explanation:
The linked list looks like this before removing the loop:
After removing the loop, the list becomes:
Input:
head = 1 -> 8 -> 3 -> 4, pos = 0
Output:
true
Explanation:
The linked list has no loop and remains unchanged.
Input:
head = 1 -> 2 -> 3 -> 4, pos = 1
Output:
true
Explanation:
The linked list looks like this before removing the loop:
After removing the loop, the list becomes:
Constraints:
1 β€ size of linked list β€ $10^5$
π― My Approach:
Detect Loop in the Linked List:
Use Floydβs Cycle-Finding Algorithm (Tortoise and Hare) to detect a loop in the linked list.
If the
slowandfastpointers meet, a loop is confirmed.
Find the Starting Node of the Loop:
Move one pointer back to the
headand traverse both pointers (slow and fast) one step at a time.The node where they meet is the starting point of the loop.
Break the Loop:
Traverse the loop to find the node whose
nextpointer points to the starting node of the loop.Set this nodeβs
nextpointer tonull, breaking the loop.
π Time and Auxiliary Space Complexity
Expected Time Complexity: O(N), where
Nis the size of the linked list. We traverse the linked list once to detect the loop and another time to remove it.Expected Auxiliary Space Complexity: O(1), as we only use a constant amount of space (two pointers).
π Solution Code
Code (C++)
π¨βπ» Alternative Approaches
Using Hashing
Approach:
Use a hash table (or a set in Python) to keep track of visited nodes.
Traverse the linked list:
If a node is revisited (i.e., it's already in the hash table), then a loop exists.
Break the loop by setting the
nextpointer of the previous node tonull.
If the end of the list is reached without revisiting any node, there is no loop.
Drawback: This method uses additional space and is less efficient.
Complexity:
Expected Time Complexity: O(n), as we traverse each node once and perform constant-time operations to check for presence in the hash table.
Expected Auxiliary Space Complexity: O(n), as we use a hash table to store visited nodes.
Code (C++)
Code (Java)
Code (Python)
This hashing-based approach is simple to implement but less space-efficient compared to the Floydβs cycle detection method.
Code (Java)
Code (Python)
π― Contribution and Support:
For discussions, questions, or doubts related to this solution, feel free to connect on LinkedIn: Any Questions. Letβs make this learning journey more collaborative!
β If you find this helpful, please give this repository a star! β
πVisitor Count
Last updated