【題目】
給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。【解析】/* struct listnode
}; */
當然這個可以使用快慢指標來做,不過,快慢指標這個方法真的是涉及到數學的問題,而我,最煩數學!
我想到乙個通過map來做的方法,先建立乙個map< listnode*, int> hash_map(hash_map的key為節點指標,value為對應的計數值)。
對鍊錶進行遍歷操作,在遍歷的過程中對每個節點進行下標 「」 操作(如果某個節點還未在hash_map中,則下標運算子會建立乙個新元素,其key為這個節點指標,其value為零),然後將value進行自增操作,經過下標操作和自增操作之後,這個節點在hash_map中對應的value就變成了1,而那些沒有被下標操作過的節點在首次進行下標操作時對應的value是0。
如果說我們在遍歷節點的過程中 ,發現某個節點對應的value是1,說明之前已經遍歷過,那這個節點肯定就是鍊錶中環的入口節點。
【參考程式】
class solution
return null;
}};
鍊錶中環的入口結點 快慢指標
題目描述 給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。分析 根據 劍指offer 上的分析,記得要查詢乙個鍊錶是否有環,設定兩個快慢指標,快指標一次走兩步,慢指標一次走一步。如果鍊錶有環,這兩個指標必定會相遇。於是,解決這道題的第一步,先要判斷鍊錶是否有環 若有環,接下...
鍊錶中環的入口節點
乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。思路 通過141題,我們知道可以通過快慢指標來判斷是否有環,現在我們假設兩個指標相遇在z點,如圖 那麼我們可以知道fast指標走過a b c b slow指標走過a b 那麼2 a b a b c b 所以a c 那麼此時讓slow回到起點,fast依然...
鍊錶中環的入口節點
題目描述 乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。演算法描述 受之前的面試題的啟發,如果我們在乙個有環的鍊錶中設定兩個鍊錶指標,乙個快,乙個慢,那麼兩個鍊錶指標相遇的時候,必然是位於鍊錶中的某個結點,利用這個結點,當我們從這個結點開始繼續遍歷,當再一次回到這個結點的時候,我們可以統計出環中的結...