LeetCode Linked List Cycle

LeetCode解題之Linked List Cycle


原題

判斷一個鏈表中是否存在着一個環,能否在不申請額外空間的前提下完成?

注意點:

例子:

輸入:

1->2->3
  |  |
  5<-4

輸出: True

解題思路

沿着鏈表不斷遍歷下去,如果遇到空節點就說明該鏈表不存在環。但如果存在環,這樣的遍歷就會進入死循環。在環上前進會不斷地繞圈子,我們讓兩個速度不同的指針繞着環前進,那麼早晚速度快的那個將追上速度慢的,所以如果速度快的追上了速度慢的,那麼該鏈表就存在環,循環終止。

AC源碼

# 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
        """
        slow = fast = head
        while fast and fast.next:
            slow = slow.next
            fast = fast.next.next
            if slow == fast:
                return True
        return False


if __name__ == "__main__":
    None

歡迎查看我的Github (https://github.com/gavinfish/LeetCode-Python) 來獲得相關源碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章