環(huán)鏈表找入口原理證明

一 目的
  • 定理推論證明
二 定理推論證明
image.png

上述變量名稱解釋

P1:鏈表的起點(diǎn)
D:鏈表的環(huán)入口(假設(shè)鏈表有環(huán))
P2:快慢指針相遇的位置
X:鏈表起點(diǎn) P1 到環(huán)入口 D 的距離
Y:鏈表環(huán)入口 D 到相遇節(jié)點(diǎn) P2 的距離
Z:快慢指針相遇點(diǎn) P2 到環(huán)入口 D的距離
C:鏈表環(huán)的距離,即 y + z
開始證明

假設(shè)快慢指針相遇時(shí),快指針在環(huán)內(nèi)走了m圈,慢指針在環(huán)內(nèi)走了n圈,則有如下公式

  • 快指針總共走的距離為
 x + y + m * c
  • 慢指針總共走的距離為
x + y + n * c

假設(shè)快指針每次走2步,慢指針每次走1步,則快指針走過的距離是慢指針走過距離的2

(x + y + m * c) = 2(x + y + n * c)                     結(jié)論1

又因?yàn)榄h(huán)長(zhǎng)為c = z + y,所以得出下面結(jié)論

(x + y + m * c) = 2(x + y + n * c)   
-> c(m - 2n) = x + y
-> c(m - 2n) = x + c - z
-> x = mc - 2nc - c + z
-> x = (m - 2n - 1) * c + z        結(jié)論2
image.png

入上圖所知,

  1. 假設(shè) 一個(gè)指針point1從起點(diǎn)出發(fā),走了(m-2n-1)*c步到達(dá)了P1位置。
  2. 另外一個(gè)指針point2從相遇點(diǎn)P2開始出發(fā),也走了(m-2n-1)*c步,最終還是停留在P1的位置(相當(dāng)于繞環(huán)走了c圈而已)。
  3. 這個(gè)時(shí)候,第一個(gè)指針point1距離環(huán)入口的距離是z(由結(jié)論2得知),第二個(gè)指針point2距離環(huán)入口距離是z(之前的假設(shè)),所以兩個(gè)指針再同時(shí)走z步,就會(huì)在環(huán)入口D處相遇
結(jié)論

要想知道環(huán)入口位置,只需先使用快慢指針,在環(huán)內(nèi)找到相遇點(diǎn)P2,然后再讓兩個(gè)指針,一個(gè)從起點(diǎn)開始出發(fā),一個(gè)從相遇點(diǎn)P2開始出發(fā),每次走一步,最終相遇的地方,即為環(huán)入口D,走過的距離,也就是環(huán)入口的距離X,定理推論完畢。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容