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.pswp.cn/news/258163.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258163.shtml
英文地址,請注明出處:http://en.pswp.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…