1. 程式人生 > >LeetCode-141.Linked List Cycle

LeetCode-141.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?

 

第一種解法

使用快慢指標,如果有環則快慢指標終會相遇,然而要是出現哪一個指標的下一個為null時則代表該連結串列沒有環

public class Solution {
    public boolean hasCycle(ListNode head) {
        if(head == null)
            return false;
        ListNode slow = head;
        ListNode fast = head;
        while (true){
            if(slow.next !=null)
                slow = slow.next;
            else
                return false;
            if(fast.next!=null){
                fast = fast.next;
                if(fast.next!=null){
                    fast = fast.next;
                }else
                    return false;
            }else
                return false;

            if(slow == fast)
                return true;
        }
    }
}

 

第二種解法

投機取巧了,看到follow up 裡說能不能使用額外的記憶體空間,我不會,就暴力了測試資料比較水,迴圈上限設定成10000次就過了

public class Solution {
    public boolean hasCycle(ListNode head) {
        if(head == null)
            return false;
        for(int i=0;i<10000;i++){
            if(head.next!=null)
                head = head.next;
            else
                return false;
        }
        return true;
    }
}

第三種解法:

這裡就不貼出來了,是用一個集合儲存遍歷出來的節點,如果集合中已經包含了下一個要遍歷的節點那麼代表當前連結串列為環形連結串列,如果遍歷出的下一個節點為 null 則代表該連結串列不是環形連結串列