目錄java
給定一個鏈表,判斷鏈表中是否有環。測試
爲了表示給定鏈表中的環,咱們使用整數 pos 來表示鏈表尾鏈接到鏈表中的位置(索引從 0 開始)。 若是 pos 是 -1,則在該鏈表中沒有環。3d
試題連接:https://leetcode-cn.com/problems/linked-list-cycle/指針
public static boolean hasCycle(ListNode head) { //定義末尾指針,指向尾部 ListNode p2 = head; int size = 1; while (p2 != null) { p2 = p2.next; size++; if(size > 10_000) { return true; } } return false; }
測試結果:code
public static boolean hasCycle(ListNode head) { //定義末尾指針,指向尾部 ListNode p2 = head; long start = System.currentTimeMillis(); while (p2 != null) { p2 = p2.next; if(System.currentTimeMillis() - start > 1) { return true; } } return false; }
測試結果:blog
public static boolean hasCycle(ListNode head) { //定義末尾指針,指向尾部 ListNode p2 = head; while (p2 != null) { if(p2.val == -1000000000) { return true; } p2.val = -1000000000; p2 = p2.next; } return false; }
測試結果:索引
public static boolean hasCycle(ListNode head) { if(head == null || head.next == null) return false; //快慢指針法 ListNode p1 = head; //快指針 ListNode p2 = head; //慢指針 while(p1 != null && p2 != null && p1.next != null) { p1 = p1.next; if(p1 == p2) { return true; } p2 = p2.next; p1 = p1.next; } return false; }
測試結果:leetcode
bool hasCycle(struct ListNode *head) { if(head == NULL || head->next == NULL) return false; //快慢指針法 struct ListNode* p1 = head; //快指針 struct ListNode* p2 = head; //慢指針 while(p1 != NULL && p2 != NULL && p1->next != NULL) { p1 = p1->next; if(p1 == p2) { return true; } p2 = p2->next; p1 = p1->next; } return false; }
測試結果:get