劍指offer 鍊錶中環的入口結點

2021-09-10 07:00:10 字數 840 閱讀 8398

題目詳述

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。

思路使用快慢指標,快指標每次走兩步,慢指標每次走一步,如果快慢指標相遇說明有環;

有環以後,需要尋找環入口節點,已經找到了乙個環中的節點,利用這個節點,去往下遍歷,由於是環,所以這個節點肯定會和自身相遇,相遇以後,記錄相遇過程中走的步數,就是環的長度。

知道環的長度以後,然後再利用快慢指標的思想,快指標先走環長度,然後快慢指標再一起走,這樣因為快指標先走了環的長度,當兩者相遇肯定是環的入口節點相遇(為啥呢,因為快慢指標肯定會進入環裡面,而由於快指標先走了環的長度,所以也就是乙個週期,所以只要進入環,那麼這兩個指標必然相遇)

public class listnode 

}public class solution

listnode fast = phead;

listnode slow = phead;

//快指標先走環的長度

int temp = 0;

while(temp < lengthchain)

while(slow != fast)

return fast;

}return null;

}private listnode judgehaschain(listnode phead) else

if(slow != null && slow.next != null) else

if(fast == slow) else

}if(flag) return fast;

else return null;

}}

劍指offer 鍊錶中環的入口

問題描述 給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。假設x為環前面的路程 紅色路程 a為環入口到相遇點的路程 綠色路程,假設順時針走 c為環的長度 藍色路程 設定快慢指標fast和slow,快指標的速度是慢指標的兩倍 當快慢指標相遇的時候 此時慢指標走的路程為sslo...

劍指Offer 鍊錶中環的入口節點

1.如果鍊錶中有環,可以通過快慢指標,最後快慢指標肯定會相會於環中的某個節點 2.從這個相會的節點開始,當再次遇到該節點,即可統計環中有節點數 n 3.設定兩個指標p,p1,p從頭先走 n 步,p1在頭部,然後兩個指標同時 走,當兩指標相遇時,相遇的節點即是環的入口。c struct listnod...

劍指Offer 鍊錶中環的入口結點

第一步 先找到環中的乙個點 第二步 確定環中有幾個元素,比如n個 第三步 讓第乙個指標先走n步,第二個指標再從頭走,兩指標相遇即為入口結點 class solution def entrynodeofloop self,phead write code here meetingnode self.m...