用快慢指针来判定是否有环。
这里while loop里的条件,用的是fast.next != null && fast.next.next != null,保证如果没有环,slow一定在中点。
1 public class Solution { 2 public boolean hasCycle(ListNode head) { 3 if (head == null || head.next == null) { 4 return false; 5 } 6 ListNode fast = head; 7 ListNode slow = head; 8 while (fast.next != null && fast.next.next != null) { 9 slow = slow.next;10 fast = fast.next.next;11 if (fast == slow) {12 return true;13 }14 }15 return false;16 }17 }