找到單向鍊錶的倒數第N個元素

2021-09-01 12:17:19 字數 567 閱讀 2015

找到單向鍊錶的倒數第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 ...