查找鏈表中倒數第k 個結點

題目:輸入一個單向鏈表,輸出該鏈表中倒數第k 個結點。鏈表的倒數第0 個結點爲鏈表的尾指針。


分析:

1、假設整個鏈表有n 個結點,那麼倒數第k 個結點是從頭結點開始的第n-k-1 個結點(從0 開始計數)。如果我們能夠得到鏈表中結點的個數n,那我們只要從頭結點開始往後走n-k-1 步就可以了。如何得到結點數n?這個不難,只需要從頭開始遍歷鏈表,每經過一個結點,計數器加一就行了。

缺點:這種思路的時間複雜度是O(n),但需要遍歷鏈表兩次。第一次得到鏈表中結點個數n,第二次得到從頭結點開始的第n -k-1 個結點即倒數第k 個結點。如果鏈表的結點數不多,這是一種很好的方法。但如果輸入的鏈表的結點個數很多,有可能不能一次性把整個鏈表都從硬盤讀入物理內存,那麼遍歷兩遍意味着一個結點需要兩次從硬盤讀入到物理內存。


2、如果我們在遍歷時維持兩個指針,第一個指針從鏈表的頭指針開始遍歷,在第k-1 步之前,第二個指針保持不動;在第k-1 步開始,第二個指針也開始從鏈表的頭指針開始遍歷。由於兩個指針的距離保持在k-1,當第一個(走在前面的)指針到達鏈表的尾結點時,第二個指針(走在後面的)指針正好是倒數第k 個結點。

發佈了26 篇原創文章 · 獲贊 9 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章