# Detect Cycle in a Linked List using Map

Given a Linked List, check if the linked list has a loop or not.

There are various methods shown here: Detect Cycle in Linked List

**Example**

Input:20->4->54->6->NULL

Output:No loop is detected.

Explanation:

While traversing the linked list we reached the end of linked list. Therefore no loop is present in linked list.

Input:20->4->5->10->20

Output:Loop detected.

Explanation:

While traversing the linked list we reached the node with value 10 is linked with the head node which depicts a loop in the linked list. Therefore loop is present in linked list.

**Approach:**

- Create a map which will store the visited node in linked list.
- Traverse the linked list and do the following:
- Check whether the current node is present in the map or not.
- If the current node is not present in the map then, insert the current node in the map.
- If the Node is present in the map, the loop in a linked list is detected.

- If we reached to
**Null Node**while traversing the linked list then, the given linked list has no loop present in it.

Below is the implementation of above approach:

`// C++ program to detect loop in ` `// given linked list using map ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Structure for a node in Linked List ` `struct` `Node { ` ` ` `int` `data; ` ` ` `Node* next; ` `}; ` ` ` `// Function to create Linked List ` `// Node ` `Node* newNode(` `int` `d) ` `{ ` ` ` `Node* temp = ` `new` `Node; ` ` ` `temp->data = d; ` ` ` `temp->next = NULL; ` ` ` `return` `temp; ` `} ` ` ` `// Declaration of Map to keep ` `// mark of visited Node ` `map<Node*, ` `bool` `> vis; ` `bool` `flag = 0; ` ` ` `// Function to check cycle in Linked ` `// List ` `void` `check(Node* head) ` `{ ` ` ` `// If head is NULL return ; ` ` ` `if` `(head == NULL) { ` ` ` `flag = 0; ` ` ` `return` `; ` ` ` `} ` ` ` ` ` `// Mark the incoming Node as ` ` ` `// visited if it is not visited yet ` ` ` `if` `(!vis[head]) { ` ` ` `vis[head] = ` `true` `; ` ` ` `check(head->next); ` ` ` `} ` ` ` ` ` `// If a visited Node is found ` ` ` `// Update the flag value to 1 ` ` ` `// and return ; ` ` ` `else` `{ ` ` ` `flag = 1; ` ` ` `return` `; ` ` ` `} ` `} ` ` ` `// Driver Code ` `int` `main() ` `{ ` ` ` `// Create a head Node ` ` ` `Node* head = newNode(20); ` ` ` ` ` `// Inserting Node in Linked List ` ` ` `head->next = newNode(4); ` ` ` `head->next->next = newNode(5); ` ` ` `head->next->next->next = newNode(10); ` ` ` ` ` `// Just to make a cycle ` ` ` `head->next->next->next->next = head; ` ` ` ` ` `// Function that detect cycle in ` ` ` `// Linked List ` ` ` `check(head); ` ` ` ` ` `// If flag is true, loop is found ` ` ` `if` `(flag) ` ` ` `cout << ` `"Loop detected."` `; ` ` ` ` ` `// If flag is false, No Loop ` ` ` `// detected ` ` ` `else` ` ` `cout << ` `"No Loop Found."` `; ` ` ` `cout << endl; ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

**Output:**

Loop detected.

**Time Complexity:** O(N*log N)

**Auxiliary Space:** O(N)

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: **DSA Self Paced**. Become industry ready at a student-friendly price.

## Recommended Posts:

- Detect loop in a linked list
- Detect and Remove Loop in a Linked List
- Detect cycle in the graph using degrees of nodes of graph
- Create new linked list from two given linked list with greater element at each node
- Merge a linked list into another linked list at alternate positions
- XOR Linked List - A Memory Efficient Doubly Linked List | Set 1
- XOR Linked List – A Memory Efficient Doubly Linked List | Set 2
- Difference between Singly linked list and Doubly linked list
- Convert singly linked list into circular linked list
- Convert Singly Linked List to XOR Linked List
- Check if a linked list is Circular Linked List
- Construct a Maximum Sum Linked List out of two Sorted Linked Lists having some Common nodes
- Create a linked list from two linked lists by choosing max element at each position
- Construct a Doubly linked linked list from 2D Matrix
- Partitioning a linked list around a given value and If we don't care about making the elements of the list "stable"
- Length of longest palindrome list in a linked list using O(1) extra space
- Rotate the sub-list of a linked list from position M to N to the right by K places
- Linked List Sum of Nodes Between 0s
- Flattening a linked list | Set 2
- Generic Linked List in C

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.