zoukankan      html  css  js  c++  java
  • [LeetCode]题解(python):142-Linked List Cycle II

    题目来源:

      https://leetcode.com/problems/linked-list-cycle-ii/


    题意分析:

      给定一个链表,如果链表有环,返回环的起始位置,否则返回NULL。要求常量空间复杂度。


    题目思路:

      首先可以用快慢指针链表是否有环。假设链表头部到环起点的距离为n,环的长度为m,快指针每次走两步,慢指针每次走一步,快慢指针在走了慢指针走t步后相遇,那么相遇的位置是(t - n) % m + n=(2*t - n)%m + n,那么得到t%m = 0,所以头部和相遇的位置一起走n步会重新相遇。那么,头部和相遇点再次走,知道相遇得到的点就为起点。


    代码(python):

    # Definition for singly-linked list.
    # class ListNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    
    class Solution(object):
        def detectCycle(self, head):
            """
            :type head: ListNode
            :rtype: ListNode
            """
            if head == None or head.next == None:
                return None
            slow = fast = head
            while fast and fast.next:
                slow = slow.next
                fast = fast.next.next
                if slow == fast:
                    tmp = head
                    while tmp != fast:
                        tmp,fast = tmp.next,fast.next
                    return tmp
            return None
                        
    View Code
  • 相关阅读:
    SQL函数——CASE
    初始Oracle
    ASP.NET中JQuery+AJAX调用后台
    性能优化——SQL语句(续)
    性能优化——SQL语句
    今日开讲—— easyui-combobox动态赋值
    SSH 项目建立过程
    Util
    前端 s 标签获取值
    日期选择文本框
  • 原文地址:https://www.cnblogs.com/chruny/p/5474610.html
Copyright © 2011-2022 走看看