學習軌道
/
Java
Java
/
練習
/
連結串列
連結串列

連結串列

中等

簡介

你正在參與一個專案,要為繁忙的鐵路網開發一套列車調度系統。

你接到的任務是為調度系統中的列車路線開發一個原型。 每條路線由一連串車站組成,也就是某一班列車沿途停靠的車站序列。

說明

你的團隊決定用雙向鏈結串列來表示時刻表上的每一條火車路線。火車路線上每一站,都會用鏈結串列中的一個節點來表示。

你不需要煩惱各站的抵達和出發時間。每一站單純用一個數字來表示就好。

路線可以延伸,在路線的開頭或結尾加入車站。路線也可以縮短,把開頭或結尾的車站移除。

有時候某個車站會關閉,這時就必須把這個車站從路線中移除,即使它不在路線的開頭或結尾也一樣。

路線的大小不是用火車行駛的距離來衡量,而是看它停靠幾站。

Note

鏈結串列是電腦科學中一種基礎的資料結構,也常用來實作其他資料結構。 顧名思義,它是一串彼此鏈結在一起的節點。 它是由「節點」組成的串列,每個節點會連接到它的一個或多個鄰居。 在單向鏈結串列中,每個節點只連接到它後面那個節點。 在雙向鏈結串列中,每個節點同時連接到它前面的節點和它後面的節點。

如果你想更深入了解鏈結串列,可以看看這篇文章,裡面用漂亮的圖解來說明。

實作

這個練習會介紹泛型。為了讓測試通過,你需要把類別設計成能接受任何型別的輸入,例如Integer或String。

泛型很實用,因為它能讓你寫出更通用、更能重複使用的程式碼。Java 的 List 與 Map 實作都是使用泛型的類別範例。使用它們,你可以建立一個包含Integers的List,或是一個包含Strings的陣列,也可以是任何其他型別。

泛型使用的型別有幾項限制。其中一項是,一旦你建立了一個包含Integers的List,就無法再把Strings放進去。建立類別時,你必須指定要放入哪一種型別,而那個實例之後就只能搭配該型別使用。

舉例來說,你可以建立一個包含Integers的陣列:

List<Integer> someList = new LinkedList<>();

現在someList只能包含Integers。你也可以這樣寫:

List<String> someOtherList = new LinkedList<>()

現在someOtherList只能包含Strings。

另一項限制是,泛型使用的型別不能是基本型別,例如int或long。不過,每個基本型別都有對應的參考型別,所以你可以用 Integer 取代int,並用 Long 取代long。

想踏出第一步的話,不妨先看看泛型的使用範例,會很有幫助喔。


出處

經典的電腦科學主題
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Java Exercism

準備好開始 連結串列 了嗎?

註冊 Exercism,透過 26 個概念158 個練習 和真人引導來學習並精通 Java,全部免費。