@snehal ..although ur approach ir good but u make d problem little complex,also missed out little checking, it can be done by using 2 pointers & single while loop--Now Instruction(CPU) Matters.
Rather then presenting different-2 algorithm i will present very famous algorithm Floyd’s Cycle-Finding Algorithm: it is the fastest method. Traverse linked list using two pointers. Move one pointer by one and other pointer by two. If these pointers meet at some node then there is a loop. If pointers do not meet then linked list doesn’t have loop. Time complexity O(n) Space Complexity O(1) Code-Snippet Below int is_loop(struct node *list) { struct node *slow_p = list, *fast_p = list; while(slow_p && fast_p && slow_p->next && fast_p->next && fast_p->next->next ) { slow_p = slow_p->next; fast_p = fast_p->next->next; if (slow_p == fast_p) { printf("Found Loop"); return 1; } } return 0; } It Will Surely Works. Regards Shashank Mani "Don't b Evil U Can Learn whilw U Earn" -- You received this message because you are subscribed to the Google Groups "Algorithm Geeks" group. To post to this group, send email to algogeeks@googlegroups.com. To unsubscribe from this group, send email to algogeeks+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/algogeeks?hl=en.