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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

双向链表(java语言实现)

發布時間:2023/12/8 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 双向链表(java语言实现) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
public class HeroNode2 {public int no;public String name;public String nickname;public HeroNode2 next; //指向下一個節點public HeroNode2 prev; //指向上一個節點public HeroNode2(int no, String name, String nickname) {this.no = no;this.name = name;this.nickname = nickname;}@Overridepublic String toString() {return "HeroNode2{" +"no=" + no +", name='" + name + '\'' +", nickname='" + nickname + '\'' +'}';} } /*** 雙向鏈表 簡單實現*/ public class DoubleLinkedList {private HeroNode2 head;private int size;public DoubleLinkedList(){this.head = new HeroNode2(0,null,null);this.size = 0;}/*** 添加節點* @param newNode*/public void addNode(HeroNode2 newNode){//如果當前沒有元素if(head.next == null){//將當前鏈表第一個節點.next = newNodehead.next = newNode;}else{HeroNode2 temp = head.next;while(true){if(temp.next == null){break;}temp = temp.next;}//最后一個鏈表節點.next = newNodetemp.next = newNode;//新節點的前一個節點指向最后鏈表的一個節點 newNode.prev = temp;newNode.prev = temp;}++size; //增加鏈表長度}/*** 修改鏈表 (這里修改名字就好)* @param index* @param newNode*/public void modifyNode(int index,HeroNode2 newNode){if(isEmpty()){System.out.println("當前鏈表為空,無法修改元素");return;}if(index < 0 || index >= size){System.out.println("修改鏈表的索引范圍必須在 0 <= index < " + size);return;}HeroNode2 temp = head.next;int currentIndex = 0;while (temp != null){if(currentIndex == index){temp.no = newNode.no;temp.name = newNode.name;temp.nickname = newNode.nickname;break;}temp = temp.next;++currentIndex;}}//刪除第一個元素,刪除最后一個元素,列表中只剩一個元素/*** 刪除鏈表中某個索引的節點* @param index*/public void deleteNode(int index){if(isEmpty()){System.out.println("鏈表為空~~");return;}if(index < 0 || index >= size){System.out.println("刪除鏈表節點的索引范圍必須在 0 <= index < " + size);return;}HeroNode2 temp = head.next;if(index == 0){head.next = temp.next;if(head.next != null){temp.next.prev = null;}}else{int currIndex = 0;while (temp.next != null){if(currIndex == index){break;}temp = temp.next;++currIndex;}//如果是刪除最后一個元素 temp.next == null --》 temp.next.prev = temp.prev; 這條邏輯語句就不用走if(temp.next != null){temp.next.prev = temp.prev;}temp.prev.next = temp.next;}--size; // 鏈表長度 - 1}public void printList(){if(isEmpty()){System.out.println("鏈表為空~~~");}HeroNode2 temp = head.next;while (temp != null){System.out.println(temp);temp = temp.next;}}/*** 判斷鏈表的元素個數是否為空* @return*/public boolean isEmpty(){return size == 0;}/*** 將新節點插入在鏈表的某個索引上,原先在該索引的節點后移* @param index* @param newNode*/public void insertNode(int index,HeroNode2 newNode){if(index < 0 || index >= size){System.out.println("插入鏈表節點的索引范圍必須在 0 <= index < " + size);return;}if(index == 0){insertNodeToHead(newNode);}else{//確定原先在該索引上的元素//在這里我們首先要 找到 鏈表在 index這個索引值下 的節點//index = 1 ==>直接找鏈表的第2個元素開始算起HeroNode2 temp = head.next.next;int currentIndex = 1;while(temp != null){if(currentIndex == index){//前一部分 【temp.prev】 的 next節點 ==》 newNode; newNode.prev ==> 【temp.prev】temp.prev.next = newNode;newNode.prev = temp.prev;//后一部分 新節點 與 【temp】 節點的關系建立newNode.next = temp;temp.prev = newNode;break;}temp = temp.next;++currentIndex;}++size; //鏈表長度+1}}/*** 將新節點插入到鏈表中,此新節點是鏈表的第一個元素* @param newNode*/public void insertNodeToHead(HeroNode2 newNode){HeroNode2 temp = head.next;head.next = newNode; //頭節點 的下一個節點 指向===> 新節點newNode.next = temp; //新節點的下一個節點 指向 原先鏈表的第一個節點temptemp.prev = newNode; //原先鏈表的第一個節點 的前一個節點指向 新節點++size; //鏈表長度+1}public static void main(String[] args) {DoubleLinkedList linkedList = new DoubleLinkedList();HeroNode2 node1 = new HeroNode2(1,"曹操","孟德");HeroNode2 node2 = new HeroNode2(2,"關羽","云長");HeroNode2 node3 = new HeroNode2(3,"郭嘉","奉孝");HeroNode2 node4 = new HeroNode2(4,"荀閾","文若");HeroNode2 node5 = new HeroNode2(5,"典韋","文滿");linkedList.addNode(node1);linkedList.addNode(node2); // linkedList.addNode(node3); // linkedList.addNode(node4); // linkedList.addNode(node5);// System.out.println("=========================start1======================="); // linkedList.addNode(node1); // linkedList.addNode(node2); // linkedList.printList(); // System.out.println("===================="); // linkedList.deleteNode(0); // linkedList.printList(); // System.out.println("===================="); // linkedList.deleteNode(0); // linkedList.printList(); // System.out.println("=========================end1=======================");// System.out.println("=============start2==============="); // // linkedList.addNode(node1); // linkedList.addNode(node2); // linkedList.addNode(node3); // linkedList.addNode(node4); // linkedList.addNode(node5); // linkedList.printList(); // System.out.println(linkedList.size); // // System.out.println("============================"); // //刪除第一個元素 // linkedList.deleteNode(0); // linkedList.printList(); // System.out.println(linkedList.size); // // System.out.println("============================"); // linkedList.deleteNode(3); // linkedList.printList(); // System.out.println(linkedList.size); // // System.out.println("==========================="); // linkedList.deleteNode(1); // linkedList.printList(); // System.out.println(linkedList.size); // // System.out.println("=============end2===============");// System.out.println("==============start3==============="); // linkedList.addNode(node1); // linkedList.addNode(node2); // linkedList.addNode(node3); // linkedList.addNode(node4); // linkedList.addNode(node5); // linkedList.printList(); // System.out.println(linkedList.size);linkedList.insertNodeToHead(new HeroNode2(6,"許楮","仲康"));linkedList.printList();System.out.println(linkedList.size); // // System.out.println("==================================="); // linkedList.insertNode(1,new HeroNode2(6,"許楮","仲康")); // linkedList.printList(); // System.out.println(linkedList.size); // // System.out.println("==================================="); // linkedList.insertNode(4,new HeroNode2(8,"許楮ABC","仲康")); // linkedList.printList(); // System.out.println("====================================="); // linkedList.insertNode(6,new HeroNode2(8,"test1","test1")); // linkedList.printList(); // System.out.println("==============end3=================");// System.out.println("============================"); // System.out.println(linkedList.size); // HeroNode2 node6 = new HeroNode2(6,"許楮","仲康"); // // linkedList.modifyNode(4,node6); // // System.out.println("============================"); // linkedList.printList();}}

?

總結

以上是生活随笔為你收集整理的双向链表(java语言实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。