雙向連結串列示意圖_Java資料結構——雙向連結串列
阿新 • • 發佈:2021-01-06
技術標籤:雙向連結串列示意圖
背景問題:
- 1、管理單向連結串列查詢的方向只能有一個。
- 2、單向連結串列不能自我刪除,刪除不方便
雙向連結串列示意圖
注意:
- 每一個雙向連結串列都有兩個頭節點,一個pre(指向前一個節點);next(指向後一個節點)
雙向連結串列的增刪改查
增加資料:
思路:
- 1、先遍歷雙線連結串列找到最後一個節點(temp)
- 2、temp.next = newHeroNode
- 3、newHeroNode.pre = temp
刪除資料:
思路:
- 遍歷雙向連結串列,找到要刪除的節點(temp)
- temp.pre.next = temp.next
- temp.next.pre = temp.pre
注意:
- 第二步與第三步道理相同,很好理解,先找到temp的前一個節點tempPre 把前一個節點的next改成temp的限一個節點(tempNext)
查詢資料:
思路:
- 直接遍歷雙向連結串列找到要查詢陣列的編號
修改資料:
思路:
- 1、直接遍歷雙向連結串列找到要查詢陣列的編號
- 2、temp.name = ???
程式碼實現
public class DoubleLinkedListText { public static void main(String[] args) { DoublieLinkedList dll = new DoublieLinkedList(); HeroNode h1 = new HeroNode(1,"劉玄德"); HeroNode h2 = new HeroNode(2,"關雲長"); HeroNode h3 = new HeroNode(3,"張翼德"); HeroNode h4 = new HeroNode(4,"諸葛亮"); dll.add(h1); dll.add(h2); dll.add(h3); dll.add(h4); dll.showAll(); dll.delete(3); dll.showAll(); } } class DoublieLinkedList{ private static HeroNode head = new HeroNode(0,""); public static HeroNode getHead() { return head; } //新增英雄 /* * 1、遍歷連結串列找到最後這個節點temp * 2、temp.next = herpNode * 3、heroNode.pre = temp*/ public void add(HeroNode heroNode){ HeroNode temp = head; while (true){ //找到最後那個節點 if (temp.next==null){ temp.next = heroNode; heroNode.pre = temp ; break; } temp = temp.next; } } //按順序新增英雄 /* * */ //刪除英雄 /* * 1、遍歷連結串列,找到編號為num的節點temp * 2、temp.pre.next = temp.next * 3、temp.next.pre = temp.pre * */ public void delete(int num){ if (head.next==null){ System.out.println("連結串列為空!"); } HeroNode temp = head.next; while (true){ if (temp.num == num){ temp.pre.next = temp.next; temp.next.pre = temp.pre; break; } temp = temp.next; } } //遍歷連結串列 public void showAll(){ if (head.next==null){ System.out.println("連結串列為空!"); return; } HeroNode temp = head.next; while (true){ if (temp==null){ break; } System.out.println(temp); temp = temp.next; } } } class HeroNode{ public int num; public String name ; public HeroNode pre; public HeroNode next ; //建構函式 public HeroNode(int num,String name){ this.num = num ; this.name = name; } //重寫toString方法 @Override public String toString() { return "HeroNode{" + "num=" + num + ", name='" + name + ''' + '}'; } }