环形链表II

  1. 首先判断是否存在环(slow走一步,fast走两步,若有环,两者必定在环中相遇)
  2. 再判断进入环的位置(index1和index2分别从头结点和相遇节点出发,都各走一步,当两者相遇时即为入环位置)
        #双指针法
        #首先判断是否存在环
        fast = slow = head
        pos = -1
        while fast:
            fast = fast.next
            if fast:
                fast = fast.next
            slow = slow.next
            if slow == fast and fast:
                pos = 0
                break
        if pos == -1:
            return None
        #再判断进入环的位置
        index1 = head
        index2 = fast
        while index1 != index2:
            index1 = index1.next
            index2 = index2.next
        return index1

参考:https://programmercarl.com/0142.%E7%8E%AF%E5%BD%A2%E9%93%BE%E8%A1%A8II.html#思路

全部评论

相关推荐

TP-LINK 前端工程师 年包大概20出头 本科
点赞 评论 收藏
转发
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务