Dada una lista vinculada, determine si tiene un ciclo.
Análisis
Si tenemos 2 punteros: rápido y lento. Está garantizado que el rápido se encontrará con el lento si existe un círculo.
El problema se puede demostrar en el siguiente diagrama:
Solución Java
public class Solution { public boolean hasCycle(ListNode head) { ListNode fast = head; ListNode slow = head; while(fast != null && fast.next != null){ slow = slow.next; fast = fast.next.next; if(slow == fast) return true; } return false; } } |