2.5 Given a circular linked list, implement an algorithm which returns node at the beginning of the loop. DEFINITION Circular linked list: A (corrupt) linked list in which a node’s 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 (the same C as earlier) output: C

Node findCircle(Node head)
{
  Node p1 = head;
  Node p2 = head;

  while (p2 != null)
  {
    if (p1 == p2)
    {
      break;
    }
      
    p1 = p1.next;
    
    p2 = p2.next;
    p2 = p2 == null ? null : p2.next;
  }
  
  if (p2 == null)
    return null;
  
  p1 = head;
  while (p1 != p2)
  {
    p1 = p1.next;
    p2 = p2.next;
  }
  
  return p1;
}