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

2021-09-11 11:05:30 字數 666 閱讀 7959

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

時間限制:1秒 空間限制:32768k 熱度指數:144136

本題知識點: 鍊錶

見**

/*

struct listnode

};*/

class solution

while(slow!=fast);

//2.計算環內長度

int l=0;

dowhile(slow!=fast);

//3.設環起始點距離起點距離為h,找出的環內結點為t,環內長度為l,

//再設找出的環內結點距離環起點的距離為a

//則t=h+a,且由1,2易得2t=t+n*l(其中n為正整數,n不為0,若為0即2t=t,t=0)

//則故t=n*l即h+a=n*l,故h=n*l-a=(n-1)*l+l-a,其中l-a為t再次到h的長度

//所以令乙個指標從起點開始,走n*l-a步,可到h(環起點)

//同時另乙個指標從t出發走n*l-a(即(n-1)*l+l-a)步也會到h

//此時兩個指標值相等,該指標所指的節點為h

fast=phead;

while(fast!=slow)

return fast;

}};

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

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。找環的入口這個問題,其實是建立在另外乙個問題之上的 判斷單向鍊錶是否有環 土方法很多,但是比較好的目前就那麼乙個 一開始設定兩個指標都指向表頭,其中乙個每次 一步 前進乙個節點的叫p1,另外那個每次 一步 前進兩個節點的叫p2...

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

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。設定塊 慢指標,快指標沒次走兩步,慢指標每次走一步,如果有環,它們一定會相遇 否則快指標會先到最後。相遇後選乙個指標在頭結點,然後與慢指標同時移動,相遇位置就為環入口 走一步和兩步 while slow fast if fas...

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

1.題目描述 給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。2.解題思路方法1 方法2 鍊錶包含環,像數字6的圖形。1 設定快慢指標,假設快指標在環內與慢指標相遇,設頭節點到入口結點的距離為x,入口結點到相遇點為y,相遇點到入口結點距離為z,則有 x y 2 x y z ...