双向链表(java语言实现)
生活随笔
收集整理的這篇文章主要介紹了
双向链表(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语言实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ①Linux简明系统编程(嵌入式公众号的
- 下一篇: 2019春学习总结