題目:
//給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。
/*struct listnode
};*/
思路:
快慢指標,快指標每次前進兩個長度,慢指標每次前進乙個長度,若存在環,則一定會在環內相遇。
假設起點到環入口長度a,環入口到相遇點長度為b,相遇點到環入口長度為c,環長度為r,則有如下關係:
2(a+b) = a+b+nr
a+b = nr
a+r-c = nr
a = c+(n-1)r
所以當存在環時,令兩個指標分別從相遇點和頭出發,相遇點即為環入口
**:
class solution
listnode * slow = phead;
listnode * fast = phead;
while
(null
!= fast &&
null
!= fast->next)
}return
null;}
listnode*
getentrynodeofloop
(listnode* fast, listnode* phead)
return fast;}}
;
鍊錶中環的入口
題目描述 給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。思路 之前我們判斷鍊錶是否有環,用兩個指標,快慢指標,乙個走一步,乙個走兩步,在此基礎上,當兩個指標相遇,此時肯定在環中,那麼接著計算環的節點數,就利用相遇節點往前走,直到在次回到相遇點,即可計算環的節點數n,然後利...
鍊錶 鍊錶中環的入口結點
給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。知識點回顧 快慢指標 思路 使用快慢指標 假設有p,q兩指標,p每步跨乙個結點,q每步跨兩個結點。那麼經過k步之後q比p多走過的結點數為k。如果鍊錶中沒有環,那麼q永遠在p的前面,兩指標不會相遇。如果鍊錶有環,且環中結點個數為...
鍊錶 鍊錶中環的入口結點
給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null 鍊錶中某些結點構成了乙個環,找打環的入口結點 head a1 a2 a3.使用雙層迴圈,例如對於結點a1,遍歷整個鍊錶判斷是否有a1 head next head head next a2,a3,an 依次 測試報錯,沒通過 ...