LeetCode141之環形連結串列(Java實現)
阿新 • • 發佈:2018-11-04
一、題目
二、兩種解題思路及程式碼實現
①龜兔賽跑解法,快指標跳兩個,慢指標跳一個,若兩指標遇到一樣,則有環
時間複雜度:O(n)
空間複雜度:O(1)
/** * 龜兔賽跑解法 ---- 李小豪 * @param head * @return */ public boolean hasCycle1(ListNode head) { ListNode target1 = head; ListNode target2 = head; if (target1==null||target1.next == null || target1.next.next == null) { return Boolean.FALSE; } while (target2.next != target1.next.next) { target1 = target1.next.next; target2 = target2.next; if ( target1.next == null || target1.next.next == null) { return Boolean.FALSE; } } return Boolean.TRUE; }
②使用Set將走過的節點儲存起來,同時判斷是否存在走過相同節點,若存在則為環
時間複雜度:O(n)
空間複雜度:O(n)
/** * 中間Set解法 ---- 李小豪 * @param head * @return */ public boolean hasCycle2(ListNode head) { Set<ListNode> listNodes=new LinkedHashSet<>(); ListNode target=head; while(target.next!=null){ if(listNodes.contains(target)){ return Boolean.TRUE; } listNodes.add(target); target=target.next; } return Boolean.FALSE; }
三、基礎類
public class ListNode {
public int val;
public ListNode next;
public ListNode(int x) {
val = x;
next = null;
}
}
四、成功截圖
測試結果還行
五、個人目標
接下來幾個月將以前多學的Leetcode的題目在刷一遍,演算法再學一遍,加油,每天升一級,願未來努力繼續。