逆向行驶!数据结构双向链表DoubleLinkedList,Java实现增删改查
生活随笔
收集整理的這篇文章主要介紹了
逆向行驶!数据结构双向链表DoubleLinkedList,Java实现增删改查
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 節點類
- 鏈表類
- 測試類
雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個數據結點中都有兩個指針,分別指向直接后繼和直接前驅。所以,從雙向鏈表中的任意一個結點開始,都可以很方便地訪問它的前驅結點和后繼結點。
節點類
//節點類 class DNode {//數據域public int id;public String name;//指針域public DNode next; //指向后一個節點public DNode pre; //指向前一個節點public DNode(int id, String name) {this.id = id;this.name = name;}@Overridepublic String toString() {return "Node{" +"id=" + id +", name='" + name + '\'' +'}';} }鏈表類
//鏈表類(管理節點) class DoubleLinkedList {//頭節點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){//因為頭節點不能動,因此要一個輔助變量tempDNode temp = head;//遍歷找到最后while (true){if (temp.next == null){break;}temp = temp.next;}//當退出while就意味著找到最后一個節點了temp.next = newNode;newNode.pre = temp;}//刪(根據id匹配刪除)public void remove(int id){if (head.next == null){System.out.println("鏈表為空!");return;}DNode temp = head.next;boolean flag = false; //用來標記是否找到對應id的節點while (true){if (temp == null){break;}if (temp.id == id){ //找到要刪除節點的前一個節點flag = true;break;}temp = temp.next;}if (flag){temp.pre.next = temp.next; //該節點前一個節點的next指向該節點后一個節點if (temp.next != null){ //只有當刪除的節點不是最后一個節點時才需要執行下面,否則空指針異常temp.next.pre = temp.pre; //該節點后一個節點的pre指向該節點前一個節點}}else {System.out.println("沒有找到要刪除的節點,刪除失敗!");}}//改(根據id匹配要修改的節點)public void update(int id,String name){if (head.next == null){System.out.println("鏈表為空!");return;}DNode temp = head.next;boolean flag = false; //用來標記是否找到對應id的節點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("沒有找到要修改的節點,修改失敗!");}}//查(根據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("沒有找到要查找的節點,查找失敗!");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();} }總結
以上是生活随笔為你收集整理的逆向行驶!数据结构双向链表DoubleLinkedList,Java实现增删改查的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一文完整MySQL连接查询,笛卡尔乘积,
- 下一篇: 简洁明了!Java实现单向环形链表以解决