Skip to main content

Finding a loop in a linked List

Finding a loop in a linked List:-

public class LinkedListLoop {

 //Two pointers
 public Node loopCheck(Node head)
 {
  //fast pointer take two steps at a time
  Node fastptr=head;
  //slow pointer take one step at a time
  Node slowptr=head;
  
  if(head==null)
  {
   System.out.println("no loops empty list");
  }
  
  //Till any pointer becomes null
  while(slowptr!=null && fastptr!=null && fastptr.next!=null)
  {
   slowptr=slowptr.next;
   fastptr=fastptr.next.next;
   
   //if both pointers point to same node
   //possible only in loop list
   if(slowptr==fastptr)
   {
    System.out.println("loopfound");
    fastptr=head;
    while(fastptr.next!=slowptr)
    {
     fastptr=fastptr.next;
    }
     return fastptr;
   }
  }
  System.out.println("loop not found");
   return head;
 }
 
 public void makeCycle(Node head)
 {
  Node temp=head;
  while(temp.next.next!=null)
  {
   temp=temp.next;
  }
  temp.next=head.next.next;
 }
 
 
}

Comments

.

Popular posts from this blog

Tree Traversal in JAVA (InOder/preOrder/postOrder)

Tree Traversal in JAVA (InOder/preOrder/postOrder):-

Tree traversal can be done through three ways.

1)Inorder:-

Go recursively to the left node.
Read a node
Go recursively to the right node.

2)Pre Order.

Read a node
Go recursively to the left node.
Go recursively to the right node.


2)Post Order.


Go recursively to the left node.
Go recursively to the right node.
Read a node



publicvoidinorder(Node root){if(root==null){return;} inorder(root.left); System.out.print(root.data+","); inorder(root.right);}publicvoidpreOrder(Node root){if(root==null){return;} System.out.print(root.data+","); preOrder(root.left); preOrder(root.right);}publicvoidpostOrder(Node root){if(root==null){return;} postOrder(root.left); postOrder(root.right); System.out.print(root.data+",");}