If you want to check if your linked list is circular you can use Floyd’s Cycle-Finding Algorithm aka Tortoise and the Hare Algorithm
.
It’s quite efficient as It has O(n) complexity.
struct Node {
int data;
Node* next;
}
bool hasLoop(Node* startNode) {
// Init start settings
Node* slowNode = startNode;
Node* fastNode = startNode->next;
// Search until we reached end of linked list of find cycle
while (true) {
if (fastNode == NULL || fastNode->next == NULL)
return false;
// if fastNode or it's successor reaches slowNode
// we have a circular list
else if (slowNode == fastNode || slowNode == fastNode->next)
return true;
slowNode = slowNode->next;
fastNode = fastNode->next->next;
}
}