詳細分析連結串列的資料結構的實現過程(Java 實現)
阿新 • • 發佈:2020-09-01
[TOC]
# 連結串列的資料結構的實現過程(Java 實現)
## 前言
在前面實現的三種線性資料結構:[動態陣列](https://www.cnblogs.com/txxunmei/p/12604177.html)、[棧和佇列](https://www.cnblogs.com/txxunmei/p/13590656.html) 雖然對使用者而言實現了動態的功能,但在底層上還是**依託著靜態陣列,使用 resize 方法解決固定容量的問題**,從根本上來說還不是真正的動態。
而對於連結串列而言,則是**真正的動態資料結構**。
因為連結串列的實現是將一個個節點靠地址的指向將這些節點掛接起來而組成的。
簡單來說,每一次在連結串列上新增新資料就是在一個已有節點的指標域上指定它的下一個節點的地址為存放新資料的節點的地址。這樣子,不論是從底層上還是使用者的角度上,都不用擔心容量的問題,所以連結串列是真正的動態資料結構。
同樣,連結串列也是一個很重要的資料結構。對於連結串列而言,它是最簡單的動態資料結構,可以幫助我們更深入地理解引用(指標)、更深入地理解遞迴以及可以用來輔助組成其他的資料結構。
## 基本概念
### 連結串列的基本結構
對連結串列而言,資料是儲存在“節點”(Node)中的,可以使用一個數據域來儲存資料,這裡我稱為 element;然後節點中還有一個用來指向下一個節點位置的節點域,一般稱為 next。而對於連結串列的結尾,一般是以 NULL 作為結尾,所以連結串列中的最後一個節點的節點域 next 指向的是 NULL。
圖示如下:
![連結串列的基本結構-1](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9teWJsb2dwaWN0dXJlLm9zcy1jbi1zaGVuemhlbi5hbGl5dW5jcy5jb20vJUU2JTk1JUIwJUU2JThEJUFFJUU3JUJCJTkzJUU2JTlFJTg0X0phdmFfJUU5JTkzJUJFJUU4JUExJUE4LyVFOSU5MyVCRSVFOCVBMSVBOCVFNyU5QSU4NCVFNSU5RiVCQSVFNiU5QyVBQyVFNyVCQiU5MyVFNiU5RSU4NC0xLmpwZw?x-oss-process=image/format,png)
所以可以先暫時設計連結串列的基本結構程式碼如下:
```java
/**
* 連結串列類
* 支援泛型
*
* @author 踏雪彡尋梅
* @date 2020-02-03 - 21:08
*/
public class Li