142 環形鍊錶II

2021-10-20 19:47:57 字數 784 閱讀 4417

該題求環形鍊錶的入口點需要解決2個問題:

判斷是否成環

怎麼找入口

問題1——判斷是否成環:

雙指標:fast,slow

定義fast每次走2步,slow每次走1步,每走一次兩指標之間間距+1。如果有環那麼fast和slow一定是在環裡面相遇,而且fast比slow多走n圈。

相遇時:

slow走過x+y

fast走過x+y+n(y+z)

因為fast的速率時slow的2倍:

2(x+y) = x + y + n(z+y)

可以得出head到入口處的距離a為:

x = (n-1)(z+y)+z

因為z+y是環的長度,如果在head和相遇處分別設定乙個指標,兩個指標同時走,那麼一定會在入口處相遇。

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

return pre;}}

return

null;}

};

ps:

&& 與& 的區別:

都是與運算;

如果&&左邊的值是false,右邊不會進行運算;但是,&即使在左邊為false的情況下依舊會對右邊的式子做出計算。

這裡如果fast為null,那麼fast->next一定不存在,無法判斷,所以要用&&。

142 環形鍊錶 II

還是快慢指標的問題,當發現有環時,將fast指向head,fast一次向前移動乙個節點,則fast和slow一定會在環的入口相遇.證明 設s為slow指標走的節點個數,m為環的入口距head的位置 則第一次相遇時,fast和head相對於環入口的位置相同,fast在環中的相對於環入口的位置在 2s ...

142 環形鍊錶 II

給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回null。說明 不允許修改給定的鍊錶。高階 你是否可以不用額外空間解決此題?definition for singly linked list.struct listnode class solution node set.insert...

142 環形鍊錶 II

給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回 null。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。說明 不允許修改給定的鍊錶。示例 1 輸入 head 3,2,0,4 pos 1 輸出...