Linked List Cycle II - LeetCode

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.

Follow up:
Can you solve it without using extra space?

 

思路:维护两个指针slow和fast。先判断是否存在环。

在判断是否存在环时,slow每次向前移动一步,fast每次移动两步。

假设从链表头开始一共移动了K次,则fast一共移动了2K步。

两个指针在相遇时,fast一定比slow多跑了至少一个整环。设链表中环长为R,

则有2K - K = nR, 即K = nR。

再看slow所跑过的过程,设链表头到环开始的节点距离为S,环内跑了mR + D,

则有K = S + mR + D。其中,D为slow和fast相遇点在单圈内距离环起点的距离。

与上面比较得 S + mR + D = nR。进一步得 S + D = (n - m)R。

这说明了:在环内,距离环起点D处继续走S步,会得到整数倍的环长,即会回到环起点处。

而巧的是,S正好也是从链表头到环起点处的距离。

因此,我们有了解法:在判断是否存在环这一步中,当slow和fast相遇后,令slow=head,然后两个指针这次都一步一步往前走,这次两者相遇的地方就是环的起点!

算法时间复杂度O(n), 空间复杂度O(1)。

 1 class Solution {
 2 public:
 3     ListNode *detectCycle(ListNode *head) {
 4         if (head == NULL) return NULL;
 5         ListNode* slow = head;
 6         ListNode* fast = head;
 7         while (fast && fast->next)
 8         {
 9             slow = slow->next;
10             fast = fast->next->next;
11             if (fast == slow) break;
12         }
13         if (fast == NULL || fast->next == NULL)
14             return NULL;
15         slow = head;
16         while (slow != fast)
17         {
18             slow = slow->next;
19             fast = fast->next;
20         }
21         return slow;
22     }
23 };

 

转载于:https://www.cnblogs.com/fenshen371/p/4906617.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258163.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 无论输入什么都是现实 not found_NotAPanda

前言面试竞争力越来越大,是时候撸一波Vue和React源码啦;本文从20个层面来对比Vue和React的源码区别;如果需要了解API的区别,请戳:Vue 开发必须知道的 36 个技巧React 开发必须知道的 34 个技巧文章源码:请戳…

这五张PPT告诉你,如何打造无人驾驶“最强大脑”

“英特尔在谈无人驾驶,会成为汽车制造商吗?NO!我们要为无人驾驶提供从车、连接到云的‘最强大脑’。” 在昨天于北京举行的英特尔无人驾驶分享会上,英特尔无人驾驶事业部中国区市场总监徐伟杰在主旨演讲中开门见山。 这也是英特尔无人驾驶事业部去年11月…

javascript之ua与urlSchema

我们首先拿到浏览器ua: 1 var ua navigator.userAgent; 1 if (ua.indexOf("MicroMessenger") > -1) { 2 alert("微信浏览器"); 3 } 1 if (ua.indexOf("iPhone") > -1) { 2 alert("iphone"); 3 } 其…

ezdpl Linux自动化部署实战

最近把ezdpl在生产环境中实施了,再加上这段时间的一些修改,一并介绍一下。再次申明: ezdpl不是开箱即用的,需要根据自己的应用环境定制。对初学者来说使用起来反倒困难更多、风险更大。它不是一个通用的项目,更多的是提…

无法打开输入文件mysql_错误LNK1181,pip安装“无法打开输入文件”mysqlclient.lib'...

我是Python新手,正在尝试安装mysql模块,但是在解决了其他5个问题之后,我现在遇到了一个问题,当我尝试安装该模块时,会出现以下日志:PS C:\Users\poste> pip install mysqlCollecting mysqlUsing cached …

俄罗斯将封杀LinkedIn 推动个人数据本地化

北京时间11月11日上午消息,莫斯科一家法院本周四支持了在俄罗斯封杀职业社交网站LinkedIn的决定。 俄罗斯联邦通信监管局(Roskomnadzor)之前要求国内外企业从2015年9月开始,必须将所有俄罗斯用户的个人数据存储在该国境内。Linked…

python的datetime举例_Python datetime模块的使用示例

1、获取当前年月日时分秒# -*- encodingutf-8 -*-import datetimenow datetime.datetime.now()print("now:{}".format(now))year now.yearprint("year:{}".format(year))month now.monthprint("month:{}".format(month))day now.dayprint(&q…

vs2015 去除 git 源代码 绑定,改成向tfs添加源码管理

除了下文的方法是将源码管理从git改成tfs之外,还要做以下几步即可 向tfs添加源码 打开源码管理(管理连接),双击打开你要向其中添加的tfs连接选中该解决方案,右键 将解决方案添加到源码管理嵌入完毕vs2015 去除 git 源代码 绑定 第一次碰到这个…

HDU 4609 FFT

题目大意 给定n条边的边值,求任意取三条边能组成三角形的概率 这里概率 P valid/tot tot (n-2)*(n-1)*n/6是没问题的 valid表示合法的方式 先考虑,任意两条边组合形成方法的总数 因为边值在100000的范围内,这里组合用fft计算 得到最后形成和…

《日志管理与分析权威指南》一2.3 良好日志记录的标准

本节书摘来华章计算机《日志管理与分析权威指南》一书中的第2章 ,第2.3节,(美) Anton A. Chuvakin Kevin J. Schmidt Christopher Phillips 著 姚 军 简于涵 刘 晖 等译更多章节内容可以访问云栖社区“华章计算机”公众号查…

Python【01】【基础部分】- A

一、WHATS PYTHON ? 1、python 简介 Python(英语发音:/ˈpaɪθən/), 是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。Python是纯粹的自由软件&#xff0…

java的自增自减_Java中自增和自减操作符(++/--)的那些事

自增()和自减(--)运算符在JAVA语言中存在着很多运算符,但是在实际开发中我们或许很少用到它们,在初次学习中却时常出现它们的身影,对于这些运算符的含义和用法,是否还记得呢?1. 概述自增操作符()和自减操作符(--)是对变…

Finished yeah!

终于到了最后的博客阶段,这时候才知道博客此时此刻是多么的惬意,它成了书写心声的自由平台!耗时一天完成这作业说起来也是蛮辛苦的,编译器需要新装,IDE需要熟悉,当然最主要的是之前浅入浅出的C功底在此次作…

《Python语言程序设计》——1.6 开始学习Python

本节书摘来自华章计算机《Python语言程序设计》一书中的第1章,第1.6节,作者:[美]梁勇(Y. Daniel Liang) 更多章节内容可以访问云栖社区“华章计算机”公众号查看。 1.6 开始学习Python 关键点:…

Tomcat性能调优

1、集成apache 虽然Tomcat也可以作web服务器,但是处理静态html的速度比不上apache,且其作为web服务器的功能远不如Apache,因此把apache和tomcat集成起来,讲html和jsp功能部分进行明确的分工,让tomcat只处理jsp部分&…

【转】sip中的subscribe和notify扩展应用技术

http://blog.csdn.net/hwz119/article/details/3965322转载于:https://www.cnblogs.com/matthew-2013/p/4917207.html

再读《被神化的框架》

开发框架,构件,组件非常地多,而且,趋势是越来越多,特别是在java中。当然也不是说其它平台的少。而特别是框架越来越被神化了,似乎用之解决一切问题,不用就要敲坏键盘。对于老衲这样的打字员来说…

河南推出近万亿PPP投资计划 郑州实现智慧城市全覆盖

1 近万亿PPP项目启动 眼下,国内财经新闻的热点聚焦在PPP开发上,这与PPP支撑国内经济平衡运行的一支强劲力量正被政府看好。就连二级市场也出现了PPP概念的抢筹现象。 9月27日,股市再一次遭遇抛售,大盘创出阶段性新低,然…

java基础实例代码_Java基础实例

打印等腰三角形代码public class ForForTest{public static void main(String []args){for(int x0;x<5;x){for(int yx1;y<5;y){System.out.print(" ");}for(int z0;zSystem.out.print("* ");}System.out.println();}}}折半查找代码&#xff1a;//练习…

###《Effective STL》--Chapter3

点击查看Evernote原文。 #author: gr #date: 2014-09-13 #email: forgeruigmail.com Chapter3 关联容器 Topic 22: 切勿直接修改set或multiset中的键 修改元素的值可以通过下面五步操作&#xff0c;避免作类型转换。 struct IDNumberLess : public binary…