链表是否有环题解。
- 投机取巧式解法
//当链表中有环的情况下,有一个指针指向该链表,可以一直循环走下去
//除以 100000 是为了刚好可以在指定时间内结束,不然报错
public class Solution {public boolean hasCycle(ListNode head) { if (head == null || head.next == null || head.next.next == null) return false; ListNode node = head; for (int i = 0;i < Integer.MAX_VALUE/100000; i++) { if (head.next != null) head = head.next; else return false; } return true; }
} - 利用链表如果有循环的时候,设置一个快指针,一个 慢指针,快指针总会追上慢指针的特征。
public class Solution { public boolean hasCycle(ListNode head) { if (head == null || head.next == null || head.next.next == null) return false; ListNode fast = head; ListNode slow = head; while (fast != null && fast.next != null) { fast = fast.next.next; slow = slow.next; if (fast == slow) return true; } return false; }