@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.

Reply via email to