無論是應屆生的春招、秋招還是社招,難以避免的一關都是要面對面試官來幾個手撕演算法,如果你參加過幾次面試,就知道鍊錶出現的頻率是極其高的。
那麼本章將提高一點難度,為你介紹常見的鍊錶演算法,包括一些 bat 等大廠的筆試面試題,同時最後彩蛋裡將詳細的介紹可以稱之為鍊錶筆試面試史上最難的一道題:lru 淘汰演算法的實現。
接下來用各大廠商的面試真題帶大家進一步的深入了解鍊錶,掌握了下面的幾道題,你就無敵了~
1.1 反轉鍊錶
題目:
反轉乙個單鏈表。
示例:
輸入: 1->2->3->4->5->null
輸出: 5->4->3->2->1->null
解題思路:
遇到鍊錶的演算法題時,我們首先需要簡化題目,雖然示列的長度有 5,但是我們要假設長度就為 1,如 1-->null,對於這樣的鍊錶,反轉鍊錶只需要將 null 節點指向 1,即 null-->1,這樣會簡單很多。不要忘記在最後返回新的頭引用!
解題**:
public listnode reverselist(listnode head) {
listnode prev = null;
listnode curr = head;
while (c