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
  • 相关阅读:
    最近重感冒完全不知道知己在记什么

    倾尽一生
    学习笔记,函数
    唯美句
    02 mysql 基础二 (进阶)
    01 mysql 基础一 (进阶)
    16 正则表达式
    15 迭代器、生成器、模块和包
    14 异常
  • 原文地址:https://www.cnblogs.com/asenyang/p/9791056.html
Copyright © 2011-2022 走看看