給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。
單鏈表如果有環,則這個環肯定在尾巴上。 而且,環的開頭和結尾都是乙個結點。所以我們可以用hash表在時空複雜度都是o(n)的情況下解決這個問題。(方法一)
可以再進行優化。用快慢指標。快慢指標判斷有環的情況就是快指標等於慢指標,但是相遇點只能證明在環上,不能證明這就是環的起點。那咋整? 經過分析我們發現,在環上相遇時,快指標一定比慢指標多走了整數個環的長度。而這整數個環的長度,則就是慢指標走過的距離。所以說,只要此時把快指標指向phead, 速度變慢,則慢指標與快指標相遇之處就是環的起始點。時間複雜度o(n), 空間複雜度o(1)。(方法二)
class
solution
set.
add(phead)
; phead = phead.next;
}return null;
}}
class
solution
return fast;}}
return null;
}}
55 鍊錶中環的入口結點
乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。思路一 使用乙個集合unordered set來儲存已經訪問過的結點,當第一次訪問到已經被訪問過的結點時,即為環的入口結點,此方法需要額外的空間進行輔助。一 struct listnode class solution else phead phead ...
55 鍊錶中環的入口結點
題目描述 給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。struct listnode class solution 兩個指標乙個fast 乙個slow同時從乙個鍊錶的頭部出發 fast一次走2步,slow一次走一步,如果該鍊錶有環,兩個指標必然在環內相遇 此時只需要把其...
55 鍊錶中環的入口結點
題目描述 給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。分析 1.得出鍊錶中環內節點數n 使用快慢指標,乙個每次走一步,乙個每次走兩步。兩指標相遇,表明鍊錶中存在環,且相遇的結點一定在環中。從相遇結點出發邊移動邊計數,直至再次回到此結點,得出環中結點數n。2.用兩個指標p...