zoukankan      html  css  js  c++  java
  • leetcode142

    public class Solution {
        public ListNode detectCycle( ListNode head ) {
            if( head == null || head.next == null ){
                return null;
            }
            // 快指针fp和慢指针sp,
            ListNode fp = head, sp = head;
            while( fp != null && fp.next != null){
                sp = sp.next;
                fp = fp.next.next;
                //此处应该用fp == sp ,而不能用fp.equals(sp) 因为链表为1 2 的时候容易
                //抛出异常
                if( fp == sp ){  //说明有环
                    break;
                }
            }
            //System.out.println( fp.val + "   "+ sp.val );
            if( fp == null || fp.next == null ){
                return null;
            }
            //说明有环,求环的起始节点
            sp = head;
            while( fp != sp ){
                sp = sp.next;
                fp = fp.next;
            }
            return sp;
        }
    }

    补充一个python的实现:

     1 class Solution:
     2     def detectCycle(self, head: ListNode) -> ListNode:
     3         if head == None or head.next == None:
     4             return None
     5         slow,fast = head,head
     6         while fast != None and fast.next != None:
     7             slow = slow.next
     8             fast = fast.next.next
     9             if slow == fast:
    10                 break
    11         if fast == None or fast.next == None:
    12             return None
    13         slow = head
    14         while slow != fast:
    15             slow = slow.next
    16             fast = fast.next
    17         return slow
  • 相关阅读:
    flask + supervisor + gunicorn
    sqlacodegen 的使用
    centos 安装 postgresql
    zipfile 压缩文件
    jmeter跨线程调用和线程内调用
    获取时间
    ant+jmeter环境配置
    Jenkins环境部署
    jmeter分布式性能测试部署
    怎么在Windows Server服务器上发布jsp网站
  • 原文地址:https://www.cnblogs.com/asenyang/p/9791056.html
Copyright © 2011-2022 走看看