1. 程式人生 > >【LeetCode 簡單題】33-環形連結串列

【LeetCode 簡單題】33-環形連結串列

宣告:

今天是第33道題。給定一個連結串列,判斷連結串列中是否有環。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除

(手動比心ღ( ´・ᴗ・` ))

正文

題目:給定一個連結串列,判斷連結串列中是否有環

進階:你能否不使用額外空間解決此題?

解法1。設定一快一慢2個指標,慢指標每次只走1步,也就是指向下一個節點,快指標每次走2步,也就是指向下下個節點,如果連結串列有環則肯定會相遇,也就是慢指標==快指標,利用這個邏輯就可以設計程式碼了,如下。

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def hasCycle(self, head):
        """
        :type head: ListNode
        :rtype: bool
        """
        # V 1.0,能提交
        slow = fast = head
        while fast.next and fast.next.next:
            fast = fast.next.next
            slow = slow.next
            if slow == fast:    # 相等即表示相遇,即表示有環
                return True
        return False            # fast.next或fast.next.next指向None表示遍歷到連結串列結尾了,沒有找到環,返回False

結尾