LintCode 帶環鍊錶

2021-08-08 14:43:14 字數 1242 閱讀 9956

給定乙個鍊錶,判斷它是否有環。

參考了網上一些資料,算是乙個總結。

感謝sunflower_yolanda的文章。

由這個問題可以引申出來幾個問題,先解決本身。

1.判斷是否有環。

利用兩個指標slow、fast。初始時,兩個指標都在表頭。slow每次走一步,fast每次走兩步。如果不存在環,那麼fast一定先到達鍊錶末尾。如果存在環,那麼fast和slow一定會在環上的某個位置相遇。

**:

/**

* definition for listnode.

* public class listnode

* }*/public

class

solution

}return

false;}}

2.求環的長度。

第一種解法:slow與fast第一次相遇之後,繼續運動,那麼再一次相遇時,slow走過的長度就是環的長度。

可以這麼理解:在操場繞圈跑步,fast的人是slow的人的速度的2倍,那麼同時同一地點開始跑,下一次相遇一定是回到了起點,slow的人跑了1圈。

第二種解法:來自sunflower_yolanda的文章,根據他的圖很容易理解。

這裡有乙個問題,就是在第一次相遇時,slow一定是沒走完整個環。

假設slow剛進入環,此時fast在環中比slow遠的距離是x,設環長l。那麼到第一次相遇,就是說 fast需要追上l-x這麼長,那麼每次追1步,需要l-x步。也就是slow從進入環到第一次相遇走了l-x步,環長l,自然沒有走完整個環。

3.求第乙個環上的點。

來自sunflower_yolanda的文章,根據他的圖很容易理解。

**:

/**

* definition for listnode.

* public class listnode

* }*/public

class

solution

return t;}}

return

null;

}

}

4.判斷兩個鍊錶是否有交叉。這也是lintcode上的一道題。

將其中乙個鍊錶的尾部指向頭部。然後判斷另乙個鍊錶是否存在環即可。若存在,那麼有交叉,否則無交叉。

lintcode 帶環鍊錶2

給定乙個鍊錶,如果鍊錶中存在環,則返回到鍊錶中環的起始節點,如果沒有環,返回null。給出 21 10 4 5,返回10 解釋 最後乙個節點5指向下標為1的節點,也就是10,所以環的入口為10 不使用額外的空間 和帶環鍊錶找環一樣,使用快慢指標,當fast slow的時候,就說明有環了。此時通過數學...

lintcode練習 102 帶環鍊錶

給定乙個鍊錶,判斷它是否有環。給出 21 10 4 5,tail connects to node index 1,返回 true 不要使用額外的空間 實現 思路 快慢指標的典型應用,使用快指標 fast 與慢指標 slow,slow每次後移一位,fast 每次後移兩位,當fast 與 slow 指...

Lintcode 102 帶環鍊錶

題目描述 給定乙個鍊錶,判斷它是否有環。這道題如果使用額外空間的話,可以借用set,每走過乙個點就放到set中,當走著走著再次碰到之前的點了就說明有環。下面使用不耗費額外空間的方法 快慢指標實現。解題思路 快慢指標的經典題。快指標每次走兩步,慢指標一次走一步。在慢指標進入環之後,快慢指標之間的距離每...