Linked List Cycle

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是否爲空


發佈了97 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章