python实现找到链表中环的入口结点

题目来自LeetCode 142. Linked List Cycle II 也是典型的面试用的编程题.
牛客网也有相应的题目,但是我摸索不出判题的标准,似乎是对于python的null和None的定义有些偏颇,有在牛客上通过的python solution麻烦分享,谢谢.

class Solution(object):
    def detectCycle(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        try:
            slow = head.next
            fast = head.next.next
            while fast != slow:
                slow = slow.next
                fast = fast.next.next
            h = head
            while h != fast:
                h = h.next
                fast = fast.next
            return  h
        except:
            return None

题目要点:
1.首先是看了LeetCode大神StefanPochmann 的discussion,他对于python的理解确实很变态,几乎达到了代码美观和算法高效的平衡.每次答题区有他的答案总能醍醐灌顶.使用try…except来做链表题目是再适合不过. 源自document中的思想Easier to ask for forgiveness than permission. 请求原谅总比请求允许要简单得多,似乎已经可以上升到人生格言的水平(先行动了再说).

Easier to ask for forgiveness than permission. This common Python coding style assumes the existence of valid keys or attributes and catches exceptions if the assumption proves false.

2.题目的代码实现并不难,只是原理比较难理解.问题分为两个部分解析:

  1. 判断链表存在回环
  2. 找到回环的入口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值