Given a circular linked list, implement and algorithm which returns the node at the beginning of the loop.
Definition:
Circular linked list: A corrupt linked list in which a nodes next pointer points to an earlier node, so as to make a loop in the linked list.
Example:
Input: A -> B -> C -> D -> E -> C (same C as earlier)
Ouput: C
Node * findLoopHead(Node *head) { if (NULL == head) { return NULL; } int listSize = 1; Node *node = head->next; while (node != NULL) { // Start at head and look at previous nodes int i; Node *previous = head; for (i = 0; i < listSize; i++) { if (node == previous) { return node; } previous = head->next; } listSize++; node = node->next; } // Not a circular linked list return NULL; }
No comments:
Post a Comment