相對於雙向鍊錶來說,單向鍊錶只能從頭到尾依次訪問鍊錶的各個節點,所以如果要找鍊錶的倒數第m個元素也只能從頭到尾進行查詢,在查詢的過程中,設定兩個指標,其中current指標指向當前訪問的節點,previous指標指向current之前的節點,且兩者之間相距m個節點,這樣,當current指標指向最後乙個節點時,那previous指標指向的元素就是倒數第m個元素,程式的處理過程如下:
element *clinklist::findmtolastelement(int m)
}//previous指標和current指標一起向尾移動
while(current->next != null)
//返回previous指標
return previous;
}在整個演算法中只使用了兩個輔助指標previous和current,所以空間複雜度為o(1),即常數。由於整個過程只訪問了鍊錶一遍,所以時間複雜度為o(n),即為線性時間。綜上所述,該演算法時間複雜度和空間複雜度都比較低,是乙個優化的演算法。
找出單向鍊錶的倒數第m個元素
高效的查詢演算法 找出單向鍊錶的倒數第m個元素node findmtolastnode node phead,int m else 一起繼續遍歷到鍊錶尾部,現在pfind和pcurrent之間間隔了m個元素,所以,當pcurrent遍歷到尾部的時候,pfind就到了倒數第m個元素的位置上.node ...
找出單向鍊錶的倒數第m個元素
相對於雙向鍊錶來說,單向鍊錶只能從頭到尾依次訪問鍊錶的各個節點,所以如果要找鍊錶的倒數第m個元素也只能從頭到尾進行查詢,在查詢的過程中,設定兩個指標,其中current指標指向當前訪問的節點,previous指標指向current之前的節點,且兩者之間相距m個節點,這樣,當current指標指向最後...
找出鍊錶倒數第K個元素
思路 可設兩個頭指標p1和p2,當p2開始向前走,當走的步數為k時,p1開始走,此時當p2走到結尾時,p1所指的位置正好為倒數第k個元素的位置 class listnode override public string tostring return sb.tostring public stati...