• 25.leetcode142_linked_list_cycle_II


    1.题目描述

    Given a linked list, return the node where the cycle begins. If there is no cycle, return null.

    Note: Do not modify the linked list.

    给出一个链表,返回链表环的起点。没有环的话,返回null(注:不使用额外的空间)

    2.题目分析

    这个题是上一题的进阶版。除了要判断链表是否有环外,还要找出它的起点。

    3.解题思路

    ①判圈算法:使用双指针,一个快指针和一个慢指针同时遍历,如果遇到快指针与慢指针相同的情况,说明存在链表环。如果遇到指针为空的情况,则不存在链表环

    ②因为快指针速度是慢指针的二倍,而当两指针相遇时,快指针比慢指针快一个链表环的长度。

    (用Ai画的示意图,应该能看懂,过多不解释)

     1 # Definition for singly-linked list.
     2 # class ListNode(object):
     3 #     def __init__(self, x):
     4 #         self.val = x
     5 #         self.next = None
     6 
     7 class Solution(object):
     8     def detectCycle(self, head):
     9         """
    10         :type head: ListNode
    11         :rtype: ListNode
    12         """
    13         if head==None:
    14             return None
    15         p1=head
    16         p2=head
    17         l1=0
    18         l2=0
    19         while p1.next!=None:
    20             p1=p1.next.next
    21             l1+=2
    22             if p1==None:
    23                 return None
    24             if p1==p2:
    25                 l=l1-l2
    26                 temp=head #设置双指针
    27                 p=head
    28                 for i in range(0,l):  #p比temp快整一个链环的长度
    29                     p=p.next
    30                 while temp.next!=None: #开始遍历链表
    31                     if temp==p: #相等返回p/temp
    32                         return p
    33                     else: #不相等,同时前进一个节点
    34                         temp=temp.next
    35                         p=p.next
    36             else:
    37                 p2=p2.next
    38                 l2+=1
    39         return None
  • 相关阅读:
    大一训练赛20181105-二分三分分治部分
    该说命运弄人,毫不留情。
    矩阵快速幂模板
    Final Destination II -- 矩阵快速幂模板题
    UVA -580 组合数学
    NYOJ-16-矩形嵌套 记忆化搜索
    封装标签省,市,县。三级联动
    java压缩图片设置宽高
    sql分页
    常用的正则表达式@java后台
  • 原文地址:https://www.cnblogs.com/19991201xiao/p/8445579.html
Copyright © 2020-2023  润新知