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->NULLOutput: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->20Output: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)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.

## Recommended Posts:

- Detect cycle in the graph using degrees of nodes of graph
- Detect cycle in Directed Graph using Topological Sort
- Detect Cycle in a 2D grid
- Adding two polynomials using Linked List using map
- Detect loop in a linked list
- Detect and Remove Loop in a Linked List
- Find length of loop in a Linked List using Map
- XOR Linked List - A Memory Efficient Doubly Linked List | Set 1
- XOR Linked List – A Memory Efficient Doubly Linked List | Set 2
- Merge a linked list into another linked list at alternate positions
- Convert singly linked list into circular linked list
- Difference between Singly linked list and Doubly linked list
- Convert Singly Linked List to XOR Linked List
- Create new linked list from two given linked list with greater element at each node
- Check if a linked list is Circular Linked List
- Generate Linked List consisting of maximum difference of squares of pairs of nodes from given Linked List
- Length of longest palindrome list in a linked list using O(1) extra space
- 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

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.