2011-09-24 13 views
4

所以問題是:找到第k個節點frm最後一個鏈接列表if nodes a disappearing once read。這應該只在一次完成。從最後一次查找被訪問節點被刪除時的第N個節點

儘量避免多餘的內存。

我知道解決這個問題的方法很簡單,就是對頭節點取兩個指針(P和Q說),並且將它們中的P增加N次,然後將兩個指針遞增。指針Q指向到第N個最後的元素。

但是這裏的問題有所不同,其中節點一旦被讀取就消失,所以沒有辦法使用這兩種指針方式。

請不要在閱讀之前關閉問題。因爲這個問題是不同的。

感謝

+1

+1用於重新發布顯示您當前想法/邏輯的問題。 –

+0

你能否用一個例子來澄清這個問題?謝謝 – brainydexter

回答

6

繼續存儲K個元素的地方,例如,如果K爲6,則存放6個最新的讀取節點的地方,你遍歷鏈表,並讀取下一個節點上,存儲和清除最久讀節點與您存儲的節點相關聯。一旦鏈表結束,你將會保存最後一個K元素(使用鏈表或數組等),最後一個K元素將是最早存儲的元素。

這可能不是最有效的解決方案,因爲我正在打字,而我在想,但它應該工作。

+1

+1由於「消失節點」的要求,我認爲你不能更有效地做到這一點。遍歷列表時,必須複製每個節點。 –

1
  1. 創建大小的隊列ķ
  2. 順序讀出所述列表中的每個元素。
  3. 在讀取每個節點時,複製節點並將其排入隊列。如果隊列已滿,則也將隊列出隊。
  4. 讀取列表中的最後一個節點後,將隊列退出。這是K-to-last元素。
相關問題