国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

雙鏈表,這回徹底搞dong了

開發 前端
前面有很詳細的講過線性表(順序表和鏈表),當時講的鏈表以單鏈表為主,但實際上在實際應用中雙鏈表的應用多一些就比如LinkedList。

前言

前面有很詳細的講過線性表(順序表和鏈表),當時講的鏈表以單鏈表為主,但實際上在實際應用中雙鏈表的應用多一些就比如LinkedList。

[[387782]]

雙鏈表與單鏈表區別

邏輯上它們均是線性表的鏈式實現,主要的區別是節點結構上的構造有所區別,這個區別從而引起操作的一些差異。

單鏈表

單鏈表的一個節點,有儲存數據的data,還有后驅節點next(指針)。也就是這個單鏈表想要一些遍歷的操作都得通過前節點—>后節點。

 

雙鏈表:

雙鏈表的一個節點,有存儲數據的data,也有后驅節點next(指針),這和單鏈表是一樣的,但它還有一個前驅節點pre(指針)。


雙鏈表結構的設計

上文講單鏈表的時候,我們當時設計的是一個帶頭結點的鏈表就錯過了不帶頭結點操作方式,這里雙鏈表咱們就不帶頭結點設計實現。并且上文單鏈表實現的時候是沒有尾指針tail的,在這里我們設計的雙鏈表帶尾指針

所以我們構造的這個雙鏈表是:不帶頭節點、帶尾指針(tail)、雙向鏈表

對于node節點:

  1. class node<T> { 
  2.   T data; 
  3.     node<T> pre; 
  4.     node<T> next
  5.  
  6.     public node() { 
  7.     } 
  8.  
  9.     public node(T data) { 
  10.         this.data = data; 
  11.     } 

對于鏈表:

  1. public class doubleList<T> { 
  2.   private node<T> head;// 頭節點 
  3.     private node<T> tail;// 尾節點 
  4.     private int length; 
  5.     //各種方法     

具體操作分析

對于一個鏈表主要的操作還是增刪。增刪的話不光需要考慮鏈表是否帶頭節點,還有頭插、尾插、中間插等多種插入刪除形式,其中的一些細節處理也是比較重要的(防止鏈表崩掉出錯),如果你對這塊理解不夠深入很容易寫錯也很難排查出來。當然,鏈表的查找、按位修改操作相比增刪操作還是容易很多。

初始化

雙鏈表在最初的時候頭指針指向為null。那么對于這個不帶頭節點的雙鏈表而言。它的head始終指向第一個真實有效的節點。tail也指向最后一個有效的節點。在最初的時候head=null,并且tail=head,此時鏈表為空,等待節點插入。

  1. public doubleList() { 
  2.     head = null
  3.     tail = head; 
  4.     length = 0; 
  5.     } 

插入

空鏈表插入

對于空鏈表來說。增加第一個元素可以特殊考慮。因為在鏈表為空的時候head和tail均為null。但head和tail又需要實實在在指向鏈表中的真實數據(帶頭指針就不需要考慮)。所以這時候就新建一個node讓head、tail等于它。

  1. node<T> teamNode = new node(data); 
  2. if (isEmpty()) { 
  3.     head = teamNode; 
  4.     tail = teamNode;     

頭插

對于頭插入來說。步驟很簡單,只需考慮head節點的變化。

  1. 新建插入節點node
  2. head前驅指向node
  3. node后驅指向head
  4. head指向node。(這時候head只是表示第二個節點,而head需要表示第一個節點故改變指向)
圖片

尾插:

對于尾插入來說。只需考慮尾節點tail節點的變化。

  1. 新建插入節點node
  2. node前驅指向tail
  3. tail后驅指向node
  4. tail指向node。(這時候tail只是表示倒數第二個節點,而tail需要表示最后節點故指向node)
圖片

按編號插入

對于編號插入來說。要考慮查找和插入兩步,而插入既和head無關也和tail無關。

1 新建插入節點node

2 找到欲插入node的前一個節點preNode。和后一個節點nextNode

3 node后驅指向nextNode,nextNode前驅指向node(此時node和后面與鏈表已經聯立,但是和前面處理分離狀態)

4 preNode后驅指向node。node前驅指向preNode(此時插入完整操作完畢)


整個流程的動態圖為:

圖片

刪除

只有單個節點刪除

無論頭刪還是尾刪,遇到單節點刪除的需要將鏈表從新初始化!

  1. if (length == 1)// 只有一個元素 
  2.     head = null
  3.     tail = head; 
  4.     length--; 

頭刪除

頭刪除需要注意的就是刪除不為空時候頭刪除只和head節點有關

流程大致分為:

1 head節點的后驅節點的前指針pre改為null。(head后面節點本指向head但是要刪除第一個先讓后面那個和head斷絕關系)


2 head節點指向head.next(這樣head就指向我們需要的第一個節點了,前面節點就被刪除成功,如果有c++等語言第一個被孤立的節點刪除釋放即可,但Java會自動釋放)


尾刪除

尾刪除需要注意的就是刪除不為空時候尾刪除只和tail節點有關。記得在普通鏈表中,我們刪除尾節點需要找到尾節點的前驅節點。需要遍歷整個表,而雙向鏈表可以直接從尾節點遍歷到前面。

尾刪除就是刪除雙向鏈表中的最后一個節點,也就是尾指針所指向的那個節點,思想和頭刪除的思想一致,具體步驟為:

  1. tail.pre.next=null尾節點的前一個節點(pre)的后驅節點等于null
  2. tail=tail.pre尾節點指向它的前驅節點,此時尾節點由于步驟1next已經為null。完成刪除
圖片

普通刪除

普通刪除需要重點掌握,普通刪除要妥善處理好待刪除節點的前后關系,具體流程如下:

1:找到待刪除節點node的前驅節點prenode(prenode.next是要刪除的節點)

2 : prenode.next.next.pre=prenode.(將待刪除node的后驅節點aftnode的pre指針指向prenode,等價于aftnode.pre=prenode)

 

3: prenode.next=prenode.next.next;此時node被跳過成功刪除。


完成刪除整個流程的動態圖為:

圖片

實現與測試

通過上面的思路簡單的實現一下雙鏈表,當然有些地方命名不太規范,實現效率有待提升,主要目的還是帶著大家理解。

代碼(代碼以圖片方式貼出,如需源碼可閱讀原文或者加我好友發你):


 

測試:


結語

在插入刪除的步驟,很多人可能因為繁瑣的過程而弄不明白,但實際上這個操作的寫法可能是多樣的,但本質操作都是一致的,所以看到其他不同版本有差距也是正常的。

還有很多人可能對一堆next.next搞不清楚,那我教你一個技巧,如果在等號右側,那么它表示一個節點,如果在等號左側,那么除了最后一個.next其他的表示節點。例如node.next.next.next可以看成(node.next.next).next。

在做數據結構與算法鏈表相關題的時候,不同題可能給不同節點去完成插入、刪除操作。這種情況操作時候要謹慎先后順序防止破壞鏈表結構。

代碼操作可能有些優化空間,還請各位大佬指正!如有收獲

 

 

責任編輯:姜華 來源: bigsai
相關推薦

2024-05-13 10:45:25

中介模式面向對象數量

2024-05-09 09:09:19

組合模式對象

2024-05-10 08:43:04

外觀模式接口系統

2019-08-27 14:46:59

ElasticSearES數據庫

2022-04-10 18:10:24

CURD鏈表

2023-12-28 10:39:57

數組節點數據結構

2023-02-27 08:10:16

2024-05-15 10:14:00

CRDT數據類型協同編輯

2024-05-11 14:18:44

迭代器模式業務

2024-05-17 10:08:59

享元模式分類方式

2024-03-11 08:47:30

CRDT數據類型協同編輯

2023-11-08 07:56:38

單鏈表雙鏈表

2021-12-14 15:43:16

機器學習人工智能代碼

2021-09-23 16:50:19

芯片摩根士丹利半導體

2021-08-02 08:26:00

技術員工P7

2022-04-12 07:51:31

架構TPSQPS

2024-05-15 17:41:37

備忘錄模式多線程

2023-11-21 20:28:02

C++Pythonweb開發

2021-07-15 06:43:12

Python數據結構

2021-11-26 07:45:37

編碼GBK字符
點贊
收藏

51CTO技術棧公眾號

日韩欧美亚洲国产一区| 二人午夜免费观看在线视频| 裤袜国产欧美精品一区| 国产午夜精品福利| 欧洲av一区| 99re6热只有精品免费观看| 91精品在线麻豆| 最新国产在线| 久久久久久久久久久久久久久99 | 丁香一区二区三区| 蜜桃狠狠色伊人亚洲综合网站| 成人爽a毛片| 中文字幕日本精品| 污污片在线免费视频| 亚洲图片欧美色图| 美女黄a一级视频| 亚洲精品中文在线| 国产宾馆自拍| 亚洲欧洲精品一区二区三区不卡| 黄色一级大片在线观看| 91丨九色丨蝌蚪丨老版| 免费毛片网站在线观看| 国产综合久久久久久鬼色| 日韩偷拍一区二区| 国产精品久久777777毛茸茸 | 成人精品影院| 98精品在线视频| 日韩影视在线观看| 国产va免费精品高清在线观看| 欧美女优在线视频| 成人免费网站在线看| 手机亚洲手机国产手机日韩| 国产欧美日韩最新| 91精品蜜臀一区二区三区在线| 亚洲xxxx做受欧美| 久久精品动漫| 人妻有码中文字幕| 中文字幕日韩av资源站| 偷拍25位美女撒尿视频在线观看| 欧美影院精品一区| 欧美极度另类| 欧美亚洲国产精品| 国产精品99免费看| 久久99国产精品一区| 国产午夜精品一区二区三区四区| 中文视频在线| 国产亚洲一区二区精品| 97久久视频| 国产精品333| 欧美日韩一二三区| av日韩在线播放| 日韩hmxxxx| 亚洲美女淫视频| 污污的视频在线观看| 国产成人a亚洲精品| 国产一区二区视频在线播放| 在线观看国产v片| www日韩欧美| 久久婷婷久久| 午夜在线播放| 国产日韩欧美在线看| 91免费看`日韩一区二区| 国产剧情在线观看| 97久久伊人激情网| 日韩精品一级中文字幕精品视频免费观看| 中文字幕2019第三页| 亚洲老头老太hd| 午夜在线精品| av片在线免费观看| 成人xxxxx| 亚洲成人精品在线观看| 最新精品在线| 毛片av在线播放| 欧美一区二区国产| 日韩一区欧美二区| 四虎影视成人| 欧美日韩在线播放一区二区| 欧美性受xxxx黑人xyx性爽| 精品伊人久久久| 国产一级做a爰片久久| 97视频在线观看免费| 国产欧美精品一区二区三区四区| 日韩黄色碟片| 丝袜制服一区二区三区| 欧美亚洲视频在线观看| 一区视频在线播放| 成人短片线上看| 青青国产在线| 亚洲图片在线观看| 国产亚洲精品美女久久久| 成人性生交大片| 欧美激情三级| 久热久精久品这里在线观看| 成人黄色免费看| 欧美日本在线看| 捆绑紧缚一区二区三区视频| 国产精品原创视频| 淫视频在线观看| 日本高清成人免费播放| 香蕉久久久久久久av网站| 亚洲第一av| 在线久久视频| 一区二区视频在线免费| 中文字幕日韩在线观看| 亚洲狼人国产精品| 青草av.久久免费一区| 欧美成人精品一级| 免费在线播放电影| 第四色婷婷基地| 亚洲午夜精品久久久久久浪潮| 55夜色66夜色国产精品视频| 欧美日韩精品欧美日韩精品一| 奇米777四色影视在线看| 国产精品欧美一区二区| 精品毛片乱码1区2区3区| 9久re热视频在线精品| 精品少妇3p| 电影一区二区三| 色影院视频在线| 午夜国产视频| 男人操女人免费| 久久久久久久久一区| 91精品免费视频| 久久久久久免费精品| 日韩欧美在线网站| 欧洲另类一二三四区| 1区2区3区欧美| 国产婷婷一区二区| 成人免费观看视频| 激情综合色丁香一区二区| 伊人久久大香线蕉av超碰演员| 一区三区在线欧| 国产精品调教| 国产综合色激情| 欧美videos粗暴| 7777kkk亚洲综合欧美网站| 欧美日韩国产综合视频| 人人超碰在线| 在线视频三级| 91网在线观看| 免费在线观看污视频| 黄色直播在线| 在线观看理论片| 欧美大片aaa| 午夜不卡视频| 岛国在线视频网站| 韩国美女久久| 91蜜桃臀久久一区二区| 国产精品中文字幕制服诱惑| 日韩三级不卡| 中国av一区| 亚洲精选久久| 国产乱子伦视频一区二区三区 | 妞干网在线视频观看| 91看片淫黄大片91| 日本黄大片一区二区三区| 香艳视频网站| 色网站在线看| 第84页国产精品| 2020国产精品极品色在线观看| 日韩在线精品强乱中文字幕| 精品国产一区一区二区三亚瑟 | 尹人成人综合网| 日本欧美久久久久免费播放网| 国产福利一区二区三区视频在线 | 26uuu久久综合| 亚洲一二三级电影| 日韩小视频在线观看专区| 久久精品国产清自在天天线| 国产精品视频免费在线| 国产精品福利在线观看网址| 国产一区再线| 在线观看欧美一区| 亚洲成色www.777999| 免费看男男www网站入口在线 | 极品少妇一区二区三区| 99在线精品免费| 精品日韩美女的视频高清| 自拍偷拍亚洲区| 亚洲一区二区四区| 国产中文在线| 亚洲精品一区国产| 国产aⅴ综合色| 天天影视色香欲综合网老头| 亚洲午夜av久久乱码| 国产日韩在线观看av| 女人喷潮完整视频| 天堂av中文在线观看| 欧美成a人免费观看久久| 久久电影网站中文字幕| 欧美一区二区视频在线观看| 成人免费午夜电影| 日本手机在线视频| 2024最新电影在线免费观看| 久久国产小视频| 国产高清精品久久久久| 精品国产污污免费网站入口| 成人欧美一区二区| av在线女优影院| 91视频一区|