題目連接
ide
題目大意:給出一個鏈表,判斷該鏈表是否有環,空間複雜度最好控制在o(1)測試
這個題沒有給測試用例,致使沒太明白題目意思,看了題解,用了兩種方法示例以下:spa
法一(借鑑):利用兩個指針,一個指針步長爲2,一個指針步長爲1,若鏈表中有環,則兩個指針同時走,在某一時刻必定會走到一塊兒;若鏈表中沒有環,則兩個指針必定會走到null,代碼以下(耗時1ms):指針
1 public boolean hasCycle(ListNode head) { 2 ListNode fast = head; 3 ListNode slow = head; 4 while(fast != null && slow != null && fast.next != null) { 5 slow = slow.next; 6 fast = fast.next.next; 7 if(slow == fast) { 8 return true; 9 } 10 } 11 return false;
法二(借鑑):利用set集合中的contains,判斷是否有兩個相同的結點在集合中,若是有,則有環,代碼以下(耗時10ms):code
1 Set<ListNode> list = new HashSet<>(); 2 while(head != null) { 3 if(list.contains(head)) { 4 return true; 5 } 6 else { 7 list.add(head); 8 head = head.next; 9 } 10 } 11 return false;