日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

逆向行驶!数据结构双向链表DoubleLinkedList,Java实现增删改查

發(fā)布時(shí)間:2023/12/2 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 逆向行驶!数据结构双向链表DoubleLinkedList,Java实现增删改查 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • 節(jié)點(diǎn)類
    • 鏈表類
    • 測試類


雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個(gè)數(shù)據(jù)結(jié)點(diǎn)中都有兩個(gè)指針,分別指向直接后繼和直接前驅(qū)。所以,從雙向鏈表中的任意一個(gè)結(jié)點(diǎn)開始,都可以很方便地訪問它的前驅(qū)結(jié)點(diǎn)和后繼結(jié)點(diǎn)。


節(jié)點(diǎn)類

//節(jié)點(diǎn)類 class DNode {//數(shù)據(jù)域public int id;public String name;//指針域public DNode next; //指向后一個(gè)節(jié)點(diǎn)public DNode pre; //指向前一個(gè)節(jié)點(diǎn)public DNode(int id, String name) {this.id = id;this.name = name;}@Overridepublic String toString() {return "Node{" +"id=" + id +", name='" + name + '\'' +'}';} }

鏈表類

//鏈表類(管理節(jié)點(diǎn)) class DoubleLinkedList {//頭節(jié)點(diǎn)private DNode head = new DNode(0,null);//展示鏈表public void list(){if (head.next == null){System.out.println("鏈表為空!");return;}DNode temp = head.next;while (true){if (temp == null){break;}System.out.println(temp);temp = temp.next;}}//增(在鏈表尾部)public void add1(DNode newNode){//因?yàn)轭^節(jié)點(diǎn)不能動(dòng),因此要一個(gè)輔助變量tempDNode temp = head;//遍歷找到最后while (true){if (temp.next == null){break;}temp = temp.next;}//當(dāng)退出while就意味著找到最后一個(gè)節(jié)點(diǎn)了temp.next = newNode;newNode.pre = temp;}//刪(根據(jù)id匹配刪除)public void remove(int id){if (head.next == null){System.out.println("鏈表為空!");return;}DNode temp = head.next;boolean flag = false; //用來標(biāo)記是否找到對應(yīng)id的節(jié)點(diǎn)while (true){if (temp == null){break;}if (temp.id == id){ //找到要?jiǎng)h除節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)flag = true;break;}temp = temp.next;}if (flag){temp.pre.next = temp.next; //該節(jié)點(diǎn)前一個(gè)節(jié)點(diǎn)的next指向該節(jié)點(diǎn)后一個(gè)節(jié)點(diǎn)if (temp.next != null){ //只有當(dāng)刪除的節(jié)點(diǎn)不是最后一個(gè)節(jié)點(diǎn)時(shí)才需要執(zhí)行下面,否則空指針異常temp.next.pre = temp.pre; //該節(jié)點(diǎn)后一個(gè)節(jié)點(diǎn)的pre指向該節(jié)點(diǎn)前一個(gè)節(jié)點(diǎn)}}else {System.out.println("沒有找到要?jiǎng)h除的節(jié)點(diǎn),刪除失敗!");}}//改(根據(jù)id匹配要修改的節(jié)點(diǎn))public void update(int id,String name){if (head.next == null){System.out.println("鏈表為空!");return;}DNode temp = head.next;boolean flag = false; //用來標(biāo)記是否找到對應(yīng)id的節(jié)點(diǎn)while (true){if (temp == null){break;}if (temp.id == id){flag = true;break;}temp = temp.next;}if (flag){temp.name = name;}else {System.out.println("沒有找到要修改的節(jié)點(diǎn),修改失敗!");}}//查(根據(jù)id匹配)public DNode show(int id){if (head.next == null){System.out.println("鏈表為空!");return null;}DNode temp = head.next;boolean flag = false;while (true){if (temp == null){break;}if (temp.id == id){flag = true;break;}temp = temp.next;}if (flag){return temp;}else {System.out.println("沒有找到要查找的節(jié)點(diǎn),查找失敗!");return null;}}}

測試類

/*** @Author: Yeman* @Date: 2021-10-15-20:20* @Description:*/ public class DoubleLinkedListTest {public static void main(String[] args) {DoubleLinkedList doubleLinkedList = new DoubleLinkedList();DNode node1 = new DNode(1, "阿蘭");DNode node2 = new DNode(2, "洛國富");DNode node3 = new DNode(3, "艾克森");doubleLinkedList.add1(node1);doubleLinkedList.add1(node2);doubleLinkedList.add1(node3);doubleLinkedList.list();// doubleLinkedList.remove(3); //刪 // doubleLinkedList.update(3,"張玉寧"); //改 // System.out.println(doubleLinkedList.show(3)); //查doubleLinkedList.list();} }

總結(jié)

以上是生活随笔為你收集整理的逆向行驶!数据结构双向链表DoubleLinkedList,Java实现增删改查的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。