給Java程式設計師的20個鍊表面試題

2021-02-21 讀芯術



全文共4258字,預計學習時長8分鐘

圖片來源:unsplash.com/@d_mccullough

今天,本文將詳細介紹編程面試中常見的鍊表問題。

什麼是鍊表?

數據結構在程序面試中極其重要。鍊表則是對數組數據結構進行的補充,是另一種常見的數據結構。和數組相似的是,鍊表也是線性數據結構,並以線性方式儲存元素。

但是,和數組不同的是,鍊表不將元素儲存在連續的位置;相反,其元素分散在內存中的各個地方,並以節點進行相互連接。

鍊表不過是一個節點的列表,其中每一個節點都包含存儲的值和下一個節點的位置。

正是因為其結構,在鍊表中添加與刪除元素變得尤為簡單,比起創建數組,它只需要簡單的更改連結。但是搜索難度很大,且通常需要增加等同的時間成本(隨著數據量的增大)才能在一個單一鍊表內找到某個元素。

此文章給出了更多數組與鍊表數據結構之間的差異:http://javarevisited.blogspot.sg/2013/07/difference-between-array-and-linked-list-java.html

鍊表也有很多種類型,比如單鍊表,允許向一個方向(向前或向後)移動;雙鍊表,允許向兩個方向(向前或向後)移動;最後是循環鍊表,形成了一個圓。

如何在面試中解決鍊表編程問題?

為了解決基於鍊表的問題,有必要充分了解遞歸,因為鍊表就是一個遞歸數據結構。

如果從鍊表中取一個節點,剩餘數據結構仍然構成一個鍊表。也正是因此,許多鍊表問題的遞歸解決方案比迭代解決方案更加簡單。

這些問題也可以用分而治之的技巧解決,將一個問題分成多個子問題,直到能完全解決它們。

比如說,要反轉一個鍊表,可以不斷將其斷開,直到只有一個節點為止。這時,你知道如何反轉只有一個節點的鍊表。鍊表不過就是同一個節點。

這與遞歸非常相似,實際上,你能解決的最小子問題就是遞歸解決方案的基本情況。

謹記:如果你不具備任何數據結構基礎知識,或近期沒有對其進行重溫,那麼解決這些基於鍊表的編程問題是沒有意義的。在這種情況下,建議你通過優秀的數據結構與算法課程(https://javarevisited.blogspot.com/2018/11/top-5-data-structures-and-algorithm-online-courses.html)或課本(https://javarevisited.blogspot.com/2015/07/5-data-structure-and-algorithm-books-best-must-read.html)來複習這個概念。

Java面試中20大鍊表問題

下面列出了技術面試中一些最常見且受歡迎的鍊表面試問題,有些已經附上了答案,但仍然建議你先自己嘗試解決問題。 

如果解決了問題或在嘗試之後陷入困境,可以看看解決方案並從中學習相關知識。

1. 如何在一次傳遞中找到單鍊表的中間元素?

答案:http://javarevisited.blogspot.sg/2012/12/how-to-find-middle-element-of-linked-list-one-pass.html

2. 如何在不使用遞歸的情況下反轉單鍊表?

答案:http://javarevisited.blogspot.sg/2017/03/how-to-reverse-linked-list-in-java-using-iteration-and-recursion.html

3. 如何刪除一個未排序鍊表中的重複節點?

答案:https://www.geeksforgeeks.org/remove-duplicates-from-an-unsorted-linked-list/

4. 如何找出一個單鍊表的長度?

答案:http://javarevisited.blogspot.sg/2016/05/how-do-you-find-length-of-singly-linked.html

5. 如何查找鍊表是否包含循環?如何找出循環開始節點?

答案:http://javarevisited.blogspot.sg/2013/05/find-if-linked-list-contains-loops-cycle-cyclic-circular-check.html

6. 如何反轉鍊表?

答案:http://www.java67.com/2016/07/how-to-reverse-singly-linked-list-in-java-example.html

7. 如何找到單鍊表中的倒數第三個節點?

答案:http://javarevisited.blogspot.sg/2016/07/how-to-find-3rd-element-from-end-in-linked-list-java.html

8. 如何使用棧計算兩個鍊表的和?

答案:https://www.geeksforgeeks.org/sum-of-two-linked-lists/

9. 如何在適當的位置反轉鍊表?

答案:http://www.java67.com/2017/06/5-difference-between-array-and-linked.html

10. 如何移除鍊表中的倒數第N個節點?

答案:https://leetcode.com/problems/remove-nth-node-from-end-of-list/solution/

11. 如何合併兩個排序的鍊表? 

12. 如何在鍊表中添加元素?

13. 如何在Java中實現鍊表排序?

答案:http://www.java67.com/2016/02/how-to-sort-linkedlist-in-java-example.html

14. 數組和鍊表有什麼區別?

15. 如何將排序列錶轉化為二分查找樹?

答案:https://leetcode.com/problems/convert-sorted-list-to-binary-search-tree/solution/

16. 給定一個鍊表和一個特定值 x,對鍊表進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。

答案:https://leetcode.com/problems/partition-list/solution/

17. 如何在整數鍊表中刪除所有與給定值相等的節點?

18. 如何找到兩個單鍊表相交的起始節點?

答案:https://leetcode.com/problems/intersection-of-two-linked-lists/solution/

19. 如何判斷一個鍊表是否是迴文結構?

20. 如何從排序鍊表中刪除重複項?

答案:https://leetcode.com/problems/remove-duplicates-from-sorted-list/solution/

這些問題將幫助你提升解題能力並提高對鍊表數據結構的了解。

程序面試的有用資源

圖片來源:unsplash.com/@charlesdeluvio

如果需要一些有用的資源來幫助搞定程序和編程工作面試,以下是一些值得一看的網絡資源和書籍:

1. 數據結構與算法:用Java進行深入研究

傳送門:https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=323058.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fdata-structures-and-algorithms-deep-dive-using-java%2F

2. 摸索編程面試:編程問題模式

傳送門:https://www.educative.io/collection/5668639101419520/5671464854355968?affiliate_id=5073518643380224

3. 程式設計師面試金典

傳送門:http://www.amazon.com/Cracking-Coding-Interview-6th-Edition/dp/0984782850/?tag=javamysqlanta-20

4. 精通編碼面試:數據結構+算法

傳送門:https://click.linksynergy.com/deeplink?id=JVFxdTr9V80&mid=39197&murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fmaster-the-coding-interview-data-structures-algorithms%2F

5. 為面試做準備-John Sonmez

傳送門:https://pluralsight.pxf.io/c/1193463/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fcourses%2Fdeveloper-job-interviews

恭喜!你離準備好編程面試更近了一步

想要在面試中獲得成功,無論公司大小,編程工作級別高低,常見的編程(http://www.java67.com/2018/05/top-75-programming-interview-questions-answers.html),數據結構(https://hackernoon.com/50-data-structure-and-algorithms-interview-questions-for-programmers-b4b1ac61f5b0)與算法問題(https://dev.to/javinpaul/50-data-structure-and-algorithms-problems-from-coding-interviews-4lh2)都是面試者必須掌握的。

以上的資料為準備面試提供了很好的主題,也有助於評估面試者的準備工作並找出其強項與弱點。

留言 點讚 發個朋友圈

我們一起分享AI學習與發展的乾貨

編譯組:段昌蓉、劉賀

相關連結:

https://dzone.com/articles/20-linked-list-interview-questions-for-java-progra

如需轉載,請後臺留言,遵守轉載規範

推薦文章閱讀

長按識別二維碼可添加關注

讀芯君愛你

相關焦點

  • 程式設計師面試最常見問題TOP 48
    近來正值秋招季節,很多編程面試都要求手寫數據結構手推機器學習算法。各位同學為了面試也會刷各種編程題,其中數據結構與排序搜索算法又是最為基礎的內容。在本文中,我們為各位讀者準備了 48 道基礎面試題,它可以幫助我們更深地理解數據結構。本文所有面試題都提供了 Java 解決方案,並介紹了比較流行的 GitHub 面試題項目。
  • 阿里螞蟻金服Java程式設計師面試的11個問題,你會幾個呢?
    此前,w3cschool app開發者頭條上分享了各種的名企程式設計師面經。比如阿里巴巴java面經、小米java面經、網易java面經等,吸引了大多數的程式設計師們的圍觀。在分享螞蟻金服Java程式設計師面經前,不妨來看下Java程式設計師面試時要注意3大要點:0、重視基礎在面試之前,有必要將基礎的知識點重新過一遍,比如並發優缺點、內存可見性、鎖、同步、線程池框架等。
  • 學了1年java的程式設計師面試,掛在了這道基礎算法題!
    這都是java的算法題,應該來講都是些比較簡單的算法題,但是我敢說很多基礎的學習的,或者想去面試的人都會不能完整的寫出來,現在
  • 面試官系列 - LeetCode鍊表知識點&題型總結
    分類刷題,我們在力扣上面可以看到,https://leet-cn.com/problemset/algorithms/ ,刷題是可以按標籤來的。比如鍊表,數組,二分查找,二叉樹,動態規劃等學好算法不是一日之功,需要長期的積累。建議的做法是每天做一兩道題,題目不在多,貴在於理解。
  • Java 程式設計師必須掌握的 8 道數據結構面試題你會幾道?
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫40多年後,這個等式仍被奉為真理。這就是為什麼在面試過程中,需要考察軟體工程師對數據結構的理解。幾乎所有的問題都需要面試者對數據結構有深刻的理解。
  • 谷歌面試題:如何從無序鍊表中移除重複項?有幾種方式?
    點擊獲取「一份貼心的10萬字面試小抄」
  • 「軟帝學院」:20道經典Java程式設計師編程面試基礎題
    對於很多初入編程行業的程式設計師來說,第一次面試編程工作時是最緊張最無助的,因為他們從來沒有面試過這類工作,不知道主考官會問什麼。那麼一般初級Java面試時會問哪些問題呢?廣州華信智原在這裡為大家準備了20道經典Java面試基礎題。1、如果main方法被聲明為private會怎樣?
  • TOP 48 算法和編程面試題,牛逼啊!
    你在申請這些工作時,肯定很想知道面試官會問到哪些問題。在本文中,作者會分享一些常見的編程面試問題,這些問題來自於針對不同經驗層次的程式設計師的面試——從應屆畢業生到具有一兩年經驗的程式設計師。編程面試題通常包含數據結構和基於算法的問題,以及一些邏輯問題,例如:如何在不使用臨時變量的情況下交換兩個整數?為了清晰,編程面試題需要劃分為不同主題。
  • java程式設計師面試遇到string題如何不涼?
    最近看到好多同學都在儲備面試知識,以備來年輕鬆應對面試官,拿到心儀offer,之前好多同學反映遇到string,都只能送給自己一首涼涼。別涼,今天小編就為大家準備了面試中常遇到的string題,讓你輕鬆愉快拿offer~首先跟大家說說如何創建string~創建字符串較簡單的方式如下String str = "Runoob";在代碼中遇到字符串常量時,這裡的值是 "Runoob"",編譯器會使用該值創建一個 String 對象。
  • 50道Java集合經典面試題(收藏版)
    前言來了來了,50道Java集合面試題也來啦~ 已經上傳github:https://github.com/whx123/JavaHome1.at java.util.AbstractList.add(AbstractList.java:148) at java.util.AbstractList.add(AbstractList.java:108) at Test.main(Test.java:13)因為 Arrays.asList不是返回java.util.ArrayList
  • 程式設計師學Java要關注的6個網站,你知道幾個呢?
    下面w3cschool給程式設計師小夥伴們分享java學習的6個網站:0、SourgeForgeSourgeForge是開源軟體開發者進行開發管理的集中式網站。有相當豐富的Java開放原始碼的著名的軟體。1、w3cschool網站有不少入門Java的程式設計師學了幾個月一頭霧水,抓不住一些重點、核心的編程知識點。還有一些程式設計師感覺到編程過於枯燥,靜不下心來學習。
  • 數據結構中的鍊表,你知道多少?
    為什麼要講鍊表呢?這是因為java中有很多集合類底層都是通過鍊表來實現的。而且面試的時候,鍊表的實現是經常考的一個知識點。所以這篇文章的重點在於,如何使用代碼去實現這些數據結構。但是這篇文章我不打算直接上來就講鍊表,而是先從線性表開始。按照慣例先給出這篇文章的大致脈絡吧。
  • Java面試題:如何對HashMap按鍵值排序
    因此,在鍵或值的基礎上排序HashMap是一個很難的面試問題,如果你不知道如何解決的話。下面讓我們看看如何解決這個問題。1. HashMap存儲每對鍵和值作為一個Entry<K,V>對象。我們將排序這個鍊表來解決順序問題。我們之所以要使用鍊表來實現這個目的,是因為在鍊表中插入元素比數組列表更快。
  • ​LeetCode刷題實戰25:K 個一組翻轉鍊表
    算法的重要性,我就不多說了吧,想去大廠,就必須要經過基礎知識和業務邏輯面試+算法面試
  • 經典Java面試題的答案——容器
    java.util.Collections則是集合類的一個工具類/幫助類,其中提供了一系列靜態方法,用於對集合中元素進行排序、搜索以及線程安全等各種操作。此類不能實例化。20.List、Set、Map 之間的區別是什麼?
  • 這是我見過最有用的java面試題,面試了無數公司總結的
    Java 集合框架的面試題這部分也包含數據結構、算法及數組的面試問題38.List、Set、Map 和 Queue 之間的區別(答案)List 是一個有序集合,允許元素重複。它的某些實現可以提供基於下標值的常量訪問時間,但是這不是 List 接口保證的。Set 是一個無序集合。
  • 每天一道leetcode61-旋轉鍊表
    旋轉鍊表分類:雙指針中文連結:https://leetcode-cn.com/problems/rotate-list/description/英文連結https://leetcode.com/problems/rotate-list/description/題目詳述 給定一個鍊表,旋轉鍊表,將鍊表每個節點向右移動 k 個位置,其中 k 是非負數
  • 3年的java程式設計師,歷經3月7輪面試入職阿里,最後薪資意外
    最近有一名java程式設計師,成功拿到了阿里雲的offer, p6的java開發崗,這本來算是一件可喜可賀的事情,可是這名java程式設計師怎麼也高興不起來,並且還是相當的糾結,這是為什麼呢?首先他對最後的薪資不是很滿意,比現在的工作只是高了一點點,這是其一,更重要的是,為了這次面試已經花了他整整三個月的時間,經歷了7輪面試,一路上各種jvm、多線程編程、算法、linux、網絡等面試題,面得他真是懷疑人生,真可謂歷經千辛萬苦,歷經九九八十一難,最後算是修成正果,拿到了真經啊,可是翻開經書一看,是空白,我想這大概就是他的心情了吧。
  • 9道Java集合面試題,搞定了再去投簡歷吧!
    今天這篇文章是單純的從面試的角度出發,以回答面試題為線索,再把整個 Java 集合框架複習一遍,希望能幫助大家拿下面試。精心準備面試既是對面試官個人時間的尊重,也是表明了你對這家公司的興趣,這樣的員工不是每家公司都想要的嗎?好了,進入正題,今天就來解決這 9 大面試題。1.
  • 面試前必看Java線程面試題
    下面是Java線程相關的熱門面試題,你可以用它來好好準備面試。1.面向對象的特徵有哪些方面?答:面向對象的特徵主要有以下幾個方面:- 抽象:抽象是將一類對象的共同特徵總結出來構造類的過程,包括數據抽象和行為抽象兩方面。