返回鍊錶開始入環的第乙個節點(BAT面試題)

2021-10-05 03:24:16 字數 818 閱讀 4131

一,題目描述

給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。 如果鍊錶無環,則返回 null

示例:

輸入:head = [3,2,0,-4], pos = 1 輸出:tail connects to node index 1

解釋:鍊錶中有乙個環,其尾部連線到第二個節點。

二,解決思路1,使用快慢指標判斷是否帶環,如果帶環即找到了快慢指標的交點,如果不帶換直接返回null即可

2,帶環的情況, 設定兩個引用, 分別從鍊錶頭部和fast slow交點出發, 按照相同的速度同步往後走,相遇的位置即為入環的第乙個節點

三,**實現

public listnode detectcycle

(listnode head)}if

(fast == null || fast.next == null)

// 帶環的情況, 設定兩個引用, 分別從鍊錶頭部和fast slow交點出發, 按照相同的速度同步往後走

listnode cur1 = head;

listnode cur2 = fast;

while

(cur1 != cur2)

// 這個位置就是環的入口

return cur1;

}

給定乙個鍊錶,返回鍊錶開始入環的第乙個節點

分析 a 鍊錶的頭節點 b 鍊錶開始入環的第乙個節點 c fast 和 slow 相遇的點 如下圖,我們設ab x,bc l,因為,fast 的速度是 slow 的二倍,所以我們可以得到等式 2 x l x l nc,化簡可得 x nc l,由於 n 是 fast 走了n 圈和slow 相遇,c表示...

LeetCode 返回鍊錶入環的第乙個節點

leetcode142 題目描述 給定乙個鍊錶,返回鍊錶開始入環的第乙個節點.如果鍊錶無環,則返回null.為了表示給定鍊錶中的環,我們使用整形pos來 表示鍊錶尾連線到鍊錶中的位置 索引從0開始 如果pos是 1,則在該鏈 表中沒有環.注意,pos僅僅是用於標識環的情況,並不會作為引數傳遞到函式中...

鍊錶中是否有環 返回鍊錶開始入環的第乙個節點

1 給定乙個鍊錶,判斷鍊錶中是否有環 我們可以用快慢指標的方法解決這個問題。fast指標一次走2步,slow指標一次走1步,則當兩個指標走一次時兩個指標相差1步,走兩次時相差2步,以此類推當走n次時fast指標與slow指標相差n步,每多走一次兩個指標之間相差步數加1。若slow走n步入環,則此時f...