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
  • 相关阅读:
    北京师范大学2016考研复试分数线
    中国人民大学2016考研复试基本分数线
    厦门大学2016年硕士研究生复试基本分数线
    上海交通大学2016年硕士复试基本分数线
    swift
    swift
    swift
    iOS 开发自定义一个提示框
    swift
    swift
  • 原文地址:https://www.cnblogs.com/asenyang/p/9791056.html
Copyright © 2011-2022 走看看