1. 程式人生 > >圖解雙鏈表(Java實現)

圖解雙鏈表(Java實現)

>原創公眾號:[bigsai](https://mp.weixin.qq.com/s/IW_GNK254ijIuuupjJsKCA) > 文章已收錄在 [全網都在關注的資料結構與演算法學習倉庫](https://github.com/javasmall/bigsai-algorithm) ### 前言 前面有很詳細的講過線性表(順序表和連結串列),當時講的連結串列以但連結串列為主,但實際上在實際應用中雙鏈表的應用多一些就比如LinkedList。 ![圖片來源百度](https://img-blog.csdnimg.cn/20190809000824266.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwNjkzMTcx,size_1,color_FFFFFF,t_70) #### 雙鏈表與單鏈表區別 邏輯上它們均是線性表的鏈式實現,主要的區別是節點結構上的構造有所區別,這個區別從而引起操作的一些差異。 **單鏈表:** 單鏈表的一個節點,有儲存資料的`data`,還有後驅節點`next`(指標)。也就是這個單鏈表想要一些遍歷的操作都得通過**前節點—>後節點**。 ![image-20210311183254265](https://img-blog.csdnimg.cn/img_convert/d7c7a19ea20eef092f111b8c78a4e2f6.png) **雙鏈表:** 雙鏈表的一個節點,有儲存資料的`data`,也有後驅節點`next`(指標),這和單鏈表是一樣的,但它還有一個前驅節點`pre`(指標)。 ![image-20210311202253887](https://img-blog.csdnimg.cn/img_convert/f665828c34e3a6a3bf0aaee3c357558a.png) #### 雙鏈表結構的設計 上文講單鏈表的時候,我們當時設計的是一個帶頭結點的連結串列就錯過了不帶頭結點操作方式,這裡雙鏈表咱們就**不帶頭結點設計實現**。並且上文單鏈表實現的時候是沒有尾指標tail的,在這裡我們設計的雙鏈表**帶尾指標**。 所以我們構造的這個雙鏈表是:**不帶頭節點、帶尾指標(tail)、雙向連結串列。** **對於node節點:** ```java class node