Java演算法面試題(001) 如何使用迴圈和遞迴計算單連結串列的長度
本文為本博主翻譯,未經允許,嚴禁轉載。
簡介
這是我第一次接受跨國投資銀行面試時所問的經典程式設計問題之一。之後,這個問題在其他程式設計工作面試中也多次被問到。讓這個問題有趣的是,與C ++開發人員相比,Java開發人員在資料結構方面並不是那麼棒,這顯然是因為這兩種語言之間的根本區別。 C ++更多的是系統程式語言,而Java更多的是應用程式程式設計,也有一套豐富的Java API允許程式設計師跳過這種基本的程式設計技術。
順便說一句,如果你正在準備面試程式設計和尋找更多的編碼或演算法的問題,例如陣列,字串或其他資料結構,你可以隨時搜尋這個部落格。
如果你喜歡讀書,那麼你也可以看看Craking the Coding Interview,其中包含150個程式設計問題和解決方案。對於初學者,中級和有經驗的程式設計師來說,這是最好的編碼問題集合之一。它包含來自基本和高階資料結構的問題,如雙向連結串列,二叉樹,自平衡樹和二進位制堆。
2種在Java中查詢連結串列長度的方法
無論如何,讓我們回到這個問題,大家都知道,在單連結串列中,最後一個元素會指向“null”元素,所以第一個答案大部分時間是“我將使用一個計數器並遞增,直到達到元素的結尾“。
一旦到達連結串列的末尾,計數器的值將等於所遇到的元素的總數,即元素的長度。
這裡是示例程式碼來實現這個演算法,你可以使用本文給出的連結串列實現來理解這個問題。我們假設連結串列類擁有頭部的引用,這是一個指向連結串列中第一個節點的指標。要了解關於連結串列資料結構的更多資訊,可以選擇一本很好的資料結構和演算法方面書,例如Thomas Cormen的<<Introduction to Algorithms>>。
迭代方案
public int length() {
int count = 0;
Node current = head;
while (current != null) {
count++;
current = current.next();
}
return count;
}
如果你沒有任何困難地回答這個問題,大多數面試官會要求你為這個問題寫一個“遞迴”的解決方案,只是為了檢查你如何處理遞迴,如果你的第一個答案是遞迴的,他們會要求你寫一個“迭代解決方案“。現在,這裡是如何使用Java中的遞迴找到單連結串列的長度:
遞迴方案
public int length(Node current) {
if (current == null) {
return 0;
}
return 1 + length(current.next());
}
你可以看到我們已經使用了最後一個節點將指向null來終止遞迴,在編寫遞迴解決方案時識別這種情況非常重要,否則程式將永遠不會終止並導致StackOverFlowError。原文連結
How do you find length of a Singly Linked list using Loop and Recursion
相關文章
- 單向迴圈連結串列
- 單連結串列逆置遞迴演算法遞迴演算法
- 連結串列-迴圈連結串列
- 設計單向迴圈連結串列的介面
- 單鏈迴圈連結串列(初版
- 連結串列4: 迴圈連結串列
- 單向迴圈連結串列的介面程式
- 單向迴圈連結串列的實現
- 單向迴圈連結串列大綱
- 遞迴演算法-不帶頭節點的單連結串列遞迴演算法
- 單向迴圈連結串列介面設計(C語言)C語言
- leetcode演算法題解(Java版)-7-迴圈連結串列LeetCode演算法Java
- 連結串列面試題(十)---求帶環單連結串列的環的長度面試題
- C++單連結串列遞迴遍歷操作C++遞迴
- 資料結構與演算法--迴圈連結串列資料結構演算法
- 反轉連結串列系列題練習遞迴遞迴
- 複習下C 連結串列操作(雙向迴圈連結串列,查詢迴圈節點)
- 雙向迴圈連結串列的介面設計(初版
- 迴圈雙連結串列的簡單操作
- 非迴圈單連結串列的建立、遍歷、排序等排序
- 資料結構之迴圈連結串列資料結構
- 單向迴圈連結串列——查詢、刪除、插入結點
- javascript中使用迴圈連結串列實現約瑟夫環問題JavaScript
- 【資料結構與演算法學習】線性表(順序表、單連結串列、雙向連結串列、迴圈連結串列)資料結構演算法
- Golang從合併連結串列聊遞迴Golang遞迴
- 迴圈連結串列(約瑟夫問題)--python實現Python
- 資料結構:單迴圈連結串列的建立插入與刪除資料結構
- 【LeetCode】 Rotate List 迴圈連結串列LeetCode
- Java遞迴演算法的使用Java遞迴演算法
- 資料結構與演算法——歸併排序: 陣列&連結串列&遞迴&非遞迴解法全家桶資料結構演算法排序陣列遞迴
- 簡單的java遞迴演算法Java遞迴演算法
- Josephus問題解決方法三(單向迴圈連結串列標識法)
- 詳細分析連結串列中的遞迴性質(Java 實現)遞迴Java
- 資料結構和演算法面試題系列—遞迴演算法總結資料結構演算法面試題遞迴
- c/c++ 線性表之單向迴圈連結串列C++
- 資料結構與演算法(二) -- 線性表之單向迴圈連結串列資料結構演算法
- 【資料結構】遞迴實現連結串列逆序資料結構遞迴
- [程式設計題]從尾到頭列印連結串列 牛客網練習 java遞迴程式設計Java遞迴