leetcode 141 判斷連結串列是否有環(C++和python實現)
阿新 • • 發佈:2018-11-13
【解題思路】
方法一:使用set來判重,每到一個新節點,判斷set中有沒有這個節點。時間複雜度為O(n*1),1代表每次查set。
方法二:龜兔賽跑。快和慢兩個指標,如果有環,則一定會相遇。具體見下面的程式碼:
【C++】
class Solution { public: bool hasCycle(ListNode *head) { if(head==NULL||head->next==NULL) return false; ListNode* slow = head; ListNode* fast = head->next; while(slow!=fast) { if(fast==NULL||fast->next==NULL) return false; slow=slow->next; fast=fast->next->next; } return true; } };
【python】
class Solution(object): def hasCycle(self, head): """ :type head: ListNode :rtype: bool """ slow = fast = head while slow and fast and fast.next: slow = slow.next fast = fast.next.next if slow is fast: return True return False