找到單向鍊錶的倒數第n個元素,如何在空間時間消耗上做到最小。
通常的做法是遍歷一邊得到長度,然後遍歷第二遍,取得對應元素。
這種做法時間消耗是鍊錶長度的2倍 - n。
或者消耗空間節省時間的方式,建立陣列,遍歷鍊錶,將元素放入陣列中。
這種做法時間消耗和空間消耗都是鍊錶長度。
那麼有沒有更好的方式。
1.建立乙個指標。
2.遍歷鍊錶,當順序是2n的倍數時,用指標記錄位置。
3.當遍歷結束時,指標之後(鍊錶長度 % 2n - n)個元素即是單向鍊錶的倒數第n個元素。
時間消耗是鍊錶長度 + (鍊錶長度 % 2n - n)
空間消耗是指標的大小。
宣告變數 point,
宣告變數 current = 鍊錶第乙個元素
宣告變數 size = 0
while(current != null)
current = current -> next
}宣告變數 result,
for (i=0; i < size % 2n - n; i++)
列印 result
找到鍊錶的倒數第n個結點
解法一 蠻力法 從鍊錶的第乙個結點開始,統計當前節點後面的節點個數。如果後面結點的個數小於n 1,那麼演算法結束並返回訊息 鍊錶中的節點個數不足。如果數量大於n 1,則移動到下乙個結點 作為新的當前結點 重複該過程直至當前結點後面的結點個數等於n 1,演算法結束。時間複雜度為o n 2 對於每個結點...
找出單向鍊錶的倒數第m個元素
相對於雙向鍊錶來說,單向鍊錶只能從頭到尾依次訪問鍊錶的各個節點,所以如果要找鍊錶的倒數第m個元素也只能從頭到尾進行查詢,在查詢的過程中,設定兩個指標,其中current指標指向當前訪問的節點,previous指標指向current之前的節點,且兩者之間相距m個節點,這樣,當current指標指向最後...
找出單向鍊錶的倒數第m個元素
高效的查詢演算法 找出單向鍊錶的倒數第m個元素node findmtolastnode node phead,int m else 一起繼續遍歷到鍊錶尾部,現在pfind和pcurrent之間間隔了m個元素,所以,當pcurrent遍歷到尾部的時候,pfind就到了倒數第m個元素的位置上.node ...