From cd2e7a3e62435a3db1859c865dc38309c1c9c7a9 Mon Sep 17 00:00:00 2001 From: Chitransh Srivastava <73604474+chitransh-sr@users.noreply.github.com> Date: Sun, 10 Oct 2021 21:33:27 +0530 Subject: [PATCH] Create DetectLoopInLinkedList.cpp --- DetectLoopInLinkedList.cpp | 89 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 DetectLoopInLinkedList.cpp diff --git a/DetectLoopInLinkedList.cpp b/DetectLoopInLinkedList.cpp new file mode 100644 index 0000000..8ef1847 --- /dev/null +++ b/DetectLoopInLinkedList.cpp @@ -0,0 +1,89 @@ + +#include +using namespace std; + +struct Node { + int key; + struct Node* next; +}; + +Node* newNode(int key) +{ + Node* temp = new Node; + temp->key = key; + temp->next = NULL; + return temp; +} + +void printList(Node* head) +{ + while (head != NULL) { + cout << head->key << " "; + head = head->next; + } + cout << endl; +} + +int distance(Node* first, Node* last) +{ + int counter = 0; + + Node* curr; + curr = first; + + while (curr != last) { + counter += 1; + curr = curr->next; + } + + return counter + 1; +} + +bool detectLoop(Node* head) +{ + + Node* temp = new Node; + + Node *first, *last; + + first = head; + last = head; + + int current_length = 0; + + int prev_length = -1; + + while (current_length > prev_length && last != NULL) { + + prev_length = current_length; + + current_length = distance(first, last); + + last = last->next; + } + + if (last == NULL) { + return false; + } + else { + return true; + } +} +int main() +{ + Node* head = newNode(1); + head->next = newNode(2); + head->next->next = newNode(3); + head->next->next->next = newNode(4); + head->next->next->next->next = newNode(5); + + head->next->next->next->next->next = head->next->next; + + bool found = detectLoop(head); + if (found) + cout << "Loop Found"; + else + cout << "No Loop Found"; + + return 0; +}