//求單鏈表的環的第一個節點,用快慢指針作 public static Node getFirstNodeInCycle(Node head){ Node slow = head; Node fast = head; // 1 找到快慢指針相遇點 while(fast != null && fast.next != null){ slow = slow.next; fast = fast.next; if(slow == fast){ break; } } //錯誤檢查,這是沒有環的狀況 if(fast == null || fast.next == null){ return null; } //2 如今,相遇點離環的開始處的距離等於鏈表頭到環開始處的距離, //這樣,咱們把快慢指針放在鏈表頭,快指針保持在相遇點,而後同速度前進,再次相遇點, //而後同速度前進,再次相遇點就是環的開始處。 slow = head; while (slow != fast){ slow = slow.next; fast = fast.next; } return fast; }