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) 來獲得相關源碼。