141.Linked List Cycle---雙指針

題目連接
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;
View Code

法二(借鑑):利用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;    
View Code
相關文章
相關標籤/搜索