LeetCode -- 判斷連結串列中是否有環
阿新 • • 發佈:2019-01-04
思路:
使用兩個節點,slow和fast,分別行進1步和2步。如果有相交的情況,slow和fast必然相遇;如果沒有相交的情況,那麼slow或fast必然有一個為null
相遇時有兩種可能:1. 只是節點相交的情況,即:slow == fast但是 slow.next != fast.next
2. 連結串列中存在環,即slow == fast 而且 slow.next == next
實現程式碼:
public bool HasCycle(ListNode head) { // - for null node , false if(head == null || head.next == null){ return false; } if(head.val != head.next.val && head.next.next == null){ return false; } var slow = head; var fast = head; while(true) { slow = slow.next; if(fast.next != null){ fast = fast.next.next; } else{ return false; } if(slow == null || slow.next == null || fast == null || fast.next == null) { return false; } if(slow.val == fast.val && slow.next.val == fast.next.val){ return true; } } return false; }