lintcode 帶環鍊錶2

2021-09-11 01:45:56 字數 699 閱讀 8957

給定乙個鍊錶,如果鍊錶中存在環,則返回到鍊錶中環的起始節點,如果沒有環,返回null。

給出-21->10->4->5,返回10

解釋:最後乙個節點5指向下標為1的節點,也就是10,所以環的入口為10

不使用額外的空間

和帶環鍊錶找環一樣,使用快慢指標,當fast == slow的時候,就說明有環了。此時通過數學計算可以證明此時slow指標走的步數等於環的長度。證明如下:

設slow指標走了i,則fast走了2i,再設環外長度為m,環長為n,則有如下的等式

(i-m)≡(2i-m)(mod n)

第一次相遇時(不包括第一次在head處)i-m=n-m,2i-m=2n-m,可以得到i = n.

也就是說,此時在環內已經走了n-m的長度,剩下m的長度。於是此時可以讓slow從head處開始走,fast的步長變為1,再繼續走,再次相遇時,就是環的入口。

/**

* definition of singly-linked-list:

* class listnode

* }*/class solution

return fast;

}fast = fast->next->next;

slow = slow->next;

index++;

}return null;

}};

LintCode 帶環鍊錶

給定乙個鍊錶,判斷它是否有環。參考了網上一些資料,算是乙個總結。感謝sunflower yolanda的文章。由這個問題可以引申出來幾個問題,先解決本身。1.判斷是否有環。利用兩個指標slow fast。初始時,兩個指標都在表頭。slow每次走一步,fast每次走兩步。如果不存在環,那麼fast一定...

lintcode練習 102 帶環鍊錶

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

Lintcode 102 帶環鍊錶

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