1. 程式人生 > >leetcode 141 判斷連結串列是否有環(C++和python實現)

leetcode 141 判斷連結串列是否有環(C++和python實現)

【解題思路】

  • 方法一:使用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