首页 > 代码库 > 【leetcode】Linked List Cycle (python)

【leetcode】Linked List Cycle (python)

题目分析见这里

class Solution:
    # @param head, a ListNode
    # @return a list node
    def detectCycle(self, head):
        if None == head or None == head.next:
            return None
        pfast = head
        pslow = head
        #找第一次相遇的点,若存在环路,则肯定会相遇
        while pfast and pfast.next:
            pfast = pfast.next.next
            pslow = pslow.next
            if pslow == pfast: break
        if pslow != pfast:
            return None
        #pfast从头开始,则下次相遇的点就是循环开始的点
        pfast = head
        while True:
            if pfast == pslow:
                return pfast
            pfast = pfast.next
            pslow = pslow.next