leetCode#141. Linked List Cycle

来源:互联网 发布:北京壁虎网络 编辑:程序博客网 时间:2024/06/05 00:22

Description

Given a linked list, determine if it has a cycle in it.

Follow up:
Can you solve it without using extra space?

Code

# Definition for singly-linked list.# class ListNode(object):#     def __init__(self, x):#         self.val = x#         self.next = Noneclass Solution(object):    def hasCycle(self, head):        """        :type head: ListNode        :rtype: bool        """        fast = slow = head        slowMove = False        while fast != None:            if slowMove:                slow = slow.next            fast = fast.next            if fast == slow:                return True            slowMove = not slowMove        return False

也可以这么写,剩一个slowMove变量:

fast = slow = headwhile fast.next != None && fast.next.next != None:    fast = fast.next.next    slow = slow.next    ...

还有StefanPochmann大佬利用try catch来处理的:

def hasCycle(self, head):    try:        slow = head        fast = head.next        while slow is not fast:            slow = slow.next            fast = fast.next.next        return True    except:        return False

他这么写的原因是:
Anyway, I’d say why I did it is speed. I could use LBYL instead, i.e., use explicit extra tests checking whether next nodes actually exist before trying to access them, but here I chose EAFP. Python will check for access errors anyway, so additionally checking it myself would be a waste of time.

And a meta-reason I did that: Probably the LBYL-way had already been posted, and I don’t post when I have nothing new to add to the discussion.
哈哈哈,大佬就是大佬,出手就是要不一样。

原创粉丝点击