題目:輸入乙個鍊錶的頭結點,從尾到頭反過來列印出每個結點的值。鍊錶結點定義如下:
public class listnode
}
這裡選擇了遞迴的方式,當遞迴到最底層的時候,呈現給我們的數值是鍊錶的最後一位。這個時候我們用arraylist接收。
最終arraylist中儲存的值的順序就是鍊錶從尾到頭的數值的順序。我們直接遍歷arraylist即可。
但是這種方法有缺陷,當鍊表長度過長的時候,會使得遞迴的深度會很大,有可能導致棧的溢位。
public class solution
return arraylist;
}public class listnode
}}
利用棧先進後出的特點: 建立乙個棧順序接收鍊錶的數值,然後遍歷棧實現數值排列逆序的輸出。相對於遞迴,我認為這是一種更合適的方法。
public class solution
//定義乙個棧
dequestack = new arraydeque<>();
while (listnode != null)
while (!stack.isempty())
return arraylist;
}public class listnode
}}
鍊錶是一種動態資料結構,是因為在建立鍊錶時,無須知道鍊錶的長度。當插入乙個結點時,我們只需要為新結點分配記憶體,然後調整指標的指向來確保新結點被鏈結到鍊錶當中。記憶體分配不是在建立鍊錶時一次性完成,而是每新增乙個結點分配一次記憶體。由於沒有閒置的記憶體,鍊錶的空間效率比陣列高。
由於鍊錶非常靈活而且**相對簡練的特點,在面試中考察的是非常多的。
劍指Offer對答如流系列 醜數
我們把只包含質因子2 3和5的數稱作醜數 ugly number 求按從小到大的順序的第n個醜數。例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。判斷乙個數是不是醜數,最容易想到的方法就是讓這個數不斷除以2,3,5。對於第n個醜數,只要從1開始,依次判斷每個數是不...
劍指Offer對答如流系列 剪繩子
給你一根長度為n繩子,請把繩子剪成m段 m n都是整數,n 1並且m 1 每段的繩子的長度記為k 0 k 1 k m k 0 k 1 k m 可能的最大乘積是多少?例如當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,此時得到最大的乘積18。遇到問題,先分析問題,由分析的結果確定所運用的演...
劍指Offer對答如流系列 包含min函式的棧
定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的min函式。在該棧中,呼叫min push及pop的時間複雜度都是o 1 push 和 pop均容易實現。主要就是min函式的定義,如果要通過操作push和pop操作獲取最小元素時間複雜度為o 1 基本上是不可能的。如果我們另外定義乙個成員...