圖片這樣的:
+----------+-------+------+
| Previous | Data | Next |
| Node | Field | Node |
+----------+-------+------+
具有兩個鏈路字段和一個數據字段的節點。
(鏈表總是更容易理解,當你繪製它們。)
我們可以有兩個:
+----------+-------+------+
| Previous | Data | Next |
| Node | Field | Node |
+----------+-------+------+
^ |
| V
+----------+-------+------+
| Previous | Data | Next |
| Node | Field | Node |
+----------+-------+------+
第2節點指向第一的Previous Node
領域。第一個節點沒有前輩,所以它的Previous Node
字段爲空。
同樣,第一個節點的Next Node
字段指向第二個節點。第二個節點沒有後繼,所以第二個節點的Next Node
字段爲空。
這是我相信需求想要的:使用指針的雙向鏈表。
編輯1:三個節點
+----------+-------+------+
| Previous | Data | Next |
| Node | Field | Node |
+----------+-------+------+
^ |
| V
+----------+-------+------+
| Previous | Data | Next |
| Node | Field | Node |
+----------+-------+------+
^ |
| V
+----------+-------+------+
| Previous | Data | Next |
| Node | Field | Node |
+----------+-------+------+
正如你可以看到,參觀(移動)在向前方式的節點,你跟着一個節點的鏈路領域獲得下一節點。同樣,要以後退的方式,您可以按照Previous Node
鏈接進入節點的前任。
關於鏈接的一個很好的問題是,您只需要更改鏈接字段,以便在列表的中間中插入一個節點。插入過程的繪製留給讀者練習。
編輯2:容器類
鏈表是節點的容器。對於簡單的實現,Container類不應該是一個Node。
容器有-一個指向第一個節點和可選的指向最後一個節點:
+------+-------+
| Last | First |
| Node | Node |
+------+-------+
| |
| +---------------+
| |
| V
| +----------+-------+------+
| | Previous | Data | Next |
| | Node | Field | Node |
| +----------+-------+------+
| ^ |
| | V
| +----------+-------+------+
| | Previous | Data | Next |
| | Node | Field | Node |
| +----------+-------+------+
| ^ |
| | V
| +----------+-------+------+
| | Previous | Data | Next |
+->| Node | Field | Node |
+----------+-------+------+
通過使用容器類,你不需要擔心的使用作爲第一個節點的空節點。在這裏,我們使用一個簡單的指針來指向第一個節點。此外,還有一個指向最後一個節點的指針。
指向最後一個節點的指針加速了追加節點到列表的操作。如果沒有這個指針,你將不得不遍歷所有的節點來找到最後一個節點,這需要花費很多時間。
不,你是複雜的問題。讓一個節點指向下一個節點,稱爲*單鏈表*。如果你真的很積極,你可以添加另一個指向前一個節點的指針。節點只需要一個或兩個指針,而不是一個數組,至少還沒有。 – 2015-02-11 01:25:45
所以我只需要我班的一個節點呢?因爲在這裏使用課程是我作業的一項要求。 – 2015-02-11 01:29:29
@TreyBrumley在單鏈表中,您的列表類只需要一個指向第一個節點的指針,如果雙重鏈接,則只需要一個指向最後一個節點的指針。其餘的由節點處理。 [This](https://en.wikipedia.org/wiki/Linked_list)可能會幫助你理解基本概念。 – 2015-02-11 01:33:52