国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Leetcode 141. Linked List Cycle

2019-11-11 05:55:23
字體:
供稿:網(wǎng)友

Given a linked list, determine if it has a cycle in it.

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

s思路: 1. 經(jīng)典的題目!在這里突然想總結(jié)一下鏈表的操作:鏈表元素插入和刪除;鏈表的單向移動。為實現(xiàn)鏈表元素插入和刪除,可能的方法包括dummy node和pointer-to-pointer;為實現(xiàn)鏈表的單向移動,就不得不提快慢指針的移動方法了,不但可以檢測是否有cycle,還可以找鏈表的中點。總之,快慢指針移動大法,都說好!我只好奇,第一個發(fā)明這個方法的人,是怎么想到這個方法的,又是來解決什么問題的? 2. 這里簡單介紹一下快慢指針法:如下圖:

-快指針移動步數(shù):a+b+(b+c)*n (在cyle里面移動n圈,n>=1)-慢指針移動步數(shù):a+b-快指針移動速度是慢的2倍,所以:2a+2b=a+(n+1)b+nc-所以:a=(n-1)(b+c)+c;因此,相遇后,把快指針放到head,慢指針放在相遇的地方,相同的速度移動,則:快慢相遇的再次相遇的地方一定是cycle開始的地方,即:可以檢查到cycle,以及break the cycle!

這里寫圖片描述

class Solution {public: bool hasCycle(ListNode *head) { // if(!head) return false; ListNode* fast=head->next,*slow=head;//bug:fast開始就要比slow快一個位置 while(fast&&fast!=slow){ fast=fast->next?fast->next->next:NULL; slow=slow->next; } return fast==slow; //return fast!=NULL;//兩個條件都可以 }};
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 门源| 潞城市| 新密市| 嘉定区| 思南县| 祁阳县| 徐闻县| 名山县| 涞水县| 新民市| 开鲁县| 安新县| 千阳县| 洪湖市| 平湖市| 南郑县| 南漳县| 辽宁省| 广宁县| 石首市| 六枝特区| 尉犁县| 萝北县| 宁远县| 崇仁县| 广德县| 利辛县| 南康市| 桂阳县| 二连浩特市| 手机| 兴仁县| 呼和浩特市| 宁晋县| 沙坪坝区| 凤翔县| 元江| 沾化县| 衢州市| 和顺县| 亚东县|