This is the right one, with the correction. temp1 -> temp. By the way aakash, that point was a good one.
On 4/4/07, Dhruva Sagar <[EMAIL PROTECTED]> wrote: > > Based on aakash's explanation there is another solution (similar to point > no 2.) > > Traverse the link list and keep nulling the pointers in the link list. > When you reach the end, the last node you reach to is the node where the > looping is occurring. > > Node*findLoopingNode(Node*start) { > Node*temp=start,*loopingNode=start; > while(loopingNode->next) { > loopingNode=temp->next; > temp->next=null; > temp=loopingNode; > } > return temp2; > } > > I have made some more changes below with red. > > On 4/4/07, aakash mandhar <[EMAIL PROTECTED] > wrote: > > > > There are many efficient ways to do this. I am listing them out. > > > > 1) Use two pointers. One advancing one node at a time and the other > > advancing 2 nodes at a time. So that the relative speed between them is > > always one node. If the first and second pointer coincide then there is a > > loop. > > > > 2) Destructive method. While travesing make each pointer point to > > itself. When you reach a node which points to itself there is a loop. > > > > 3) Reverse the linked list as you traverse. If you reach the starting > > node again. then there is a loop. > > > > 4) Similar to first. But here move the first node by one and keep moving > > the other node in multiples of two. During the movement compare if the two > > nodes meet. If not advance the first node to the second node and start > > moving again. > > > > Regards, > > Aakash > > > > On 4/4/07, Dhruva Sagar < [EMAIL PROTECTED]> wrote: > > > > > > An alternate solution may be something like this: > > > > > > You have two loops. one inside another. > > > > > Node*findLoopingNode(Node*Start) { > > > > > node*temp1=start,*temp2=start; > > > node*loopingNode=null; > > > while(temp1) { > > > while(temp2) { > > > if(temp1->next=temp2->next) { > > > loopingNode=temp1->next; > > > break; > > > } > > > temp2=temp2->next; > > > } > > > if(loopingNode!=null) > > > break; > > > temp1=temp1->next; > > > } > > > > return loopingNode; > > > > > } > > > > On 4/4/07, Pradeep Juneja <[EMAIL PROTECTED]> wrote: > > > > > > > > > > > > > > > > How can we know at what node, list has the loop ? > > > > i.e > > > > A---->B----->*C*------->D------>E------F----- > > > > | > > > > | > > > > ----------------------------- - -| > > > > > > > > > > > > > > > > > > > > > -- > > > Thanks & Regards, > > > Dhruva Sagar. > > > > > > > > > > > > > > > > > > > > -- > Thanks & Regards, > Dhruva Sagar. -- Thanks & Regards, Dhruva Sagar. --~--~---------~--~----~------------~-------~--~----~ 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 [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/algogeeks -~----------~----~----~----~------~----~------~--~---