publicclassLinkedListCycleII{ /** * Given a linked list, return the node where the cycle begins. * If there is no cycle, return null. * * To represent a cycle in the given linked list, * we use an integer pos which represents the position (0-indexed) in the linked list where tail connects to. * If pos is -1, then there is no cycle in the linked list. * * Note: Do not modify the linked list. */ public ListNode detectCycle(ListNode head){ if (head == null || head.next == null) returnnull; ListNode slow = head; ListNode fast = head;
while(fast!= null && fast.next != null) { fast = fast.next.next; slow = slow.next; if (slow == fast) { fast = head; while(slow != fast) { slow = slow.next; fast = fast.next; } return slow; } } returnnull; } }