Given a linked list, determine if it has a cycle in it.
Follow up:
Can you solve it without using extra space?
題意:判斷鏈表中是否有環
思路:採用快慢指針的方法,快指針走兩步,慢指針走一步,如果有環,則總有相遇的時候即快慢指針相等的時候
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public boolean hasCycle(ListNode head) {
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;
}
}
輸入鏈表爲空時,沒有環,返回false。因爲fast指針比slow指針走得快,所以只要判斷fast指針是否爲空就行。由於fast指針一次走兩步,所以當fast.next可能已經爲空(當fast爲尾結點時),fast.next.next將會導致NullPointerException異常,所以在while循環中要判斷fast.next是否爲空