In this Cycle Detection HackerRank solution, A linked list is said to contain a cycle if any node is visited more than once while traversing the list. Given a pointer to the head of a linked list, determine if it contains a cycle. If it does, return . Otherwise, return .
Example
refers to the list of nodes
The numbers shown are the node numbers, not their data values. There is no cycle in this list so return .
refers to the list of nodes
There is a cycle where node 3 points back to node 1, so return .
Function Description
Complete the has_cycle function in the editor below.
It has the following parameter:
- SinglyLinkedListNode pointer head: a reference to the head of the list
Returns
- int: if there is a cycle or if there is not
Note: If the list is empty, will be null.
Input Format
The code stub reads from stdin and passes the appropriate argument to your function. The custom test cases format will not be described for this question due to its complexity. Expand the section for the main function and review the code if you would like to figure out how to create a custom case.
Constraints
Sample Input
References to each of the following linked lists are passed as arguments to your function:
Sample Output
0
1
Explanation
- The first list has no cycle, so return .
- The second list has a cycle, so return .
Cycle Detection HackerRank solution
I will Provide solution in Multiple programming languages for you. If you are not able to find the code in required language then please share in comments so that our team can help you.
Problem Solution in Python
def has_cycle(head):
# dictionary of visits
visits = {}
# setting up head node
node = head
# visiting all nodes until duplicate found
while node:
node = node.next
if node in visits:
return 1
else:
visits[node] = 1
return 0
Problem Solution in C++
bool has_cycle(SinglyLinkedListNode* head) {
unordered_set<SinglyLinkedListNode*> num_set;
while (head) {
if (num_set.find(head) == num_set.end())
num_set.insert(head);
else
return 1;
head = head->next;
}
return 0;
}
Problem Solution in Java
static boolean hasCycle(SinglyLinkedListNode head) {
if(head == null){
return false;
}
Set<SinglyLinkedListNode> nodes = new HashSet<>();
while(head != null){
if(nodes.contains(head)){
return true;
}
nodes.add(head);
head = head.next;
}
return false;
}
Problem Solution in C#
static bool hasCycle(SinglyLinkedListNode head) {
var values = new HashSet<SinglyLinkedListNode>();
while (head != null) {
if (values.Contains(head))
{
return true;
}
else
{
values.Add(head);
head = head.next;
}
}
return false;
}
Leave a Reply