双向链表(java语言实现)
生活随笔
收集整理的這篇文章主要介紹了
双向链表(java语言实现)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
public class HeroNode2 {public int no;public String name;public String nickname;public HeroNode2 next; //指向下一個(gè)節(jié)點(diǎn)public HeroNode2 prev; //指向上一個(gè)節(jié)點(diǎn)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 + '\'' +'}';}
}
/*** 雙向鏈表 簡(jiǎn)單實(shí)現(xiàn)*/
public class DoubleLinkedList {private HeroNode2 head;private int size;public DoubleLinkedList(){this.head = new HeroNode2(0,null,null);this.size = 0;}/*** 添加節(jié)點(diǎn)* @param newNode*/public void addNode(HeroNode2 newNode){//如果當(dāng)前沒(méi)有元素if(head.next == null){//將當(dāng)前鏈表第一個(gè)節(jié)點(diǎn).next = newNodehead.next = newNode;}else{HeroNode2 temp = head.next;while(true){if(temp.next == null){break;}temp = temp.next;}//最后一個(gè)鏈表節(jié)點(diǎn).next = newNodetemp.next = newNode;//新節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)指向最后鏈表的一個(gè)節(jié)點(diǎn) newNode.prev = temp;newNode.prev = temp;}++size; //增加鏈表長(zhǎng)度}/*** 修改鏈表 (這里修改名字就好)* @param index* @param newNode*/public void modifyNode(int index,HeroNode2 newNode){if(isEmpty()){System.out.println("當(dāng)前鏈表為空,無(wú)法修改元素");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;}}//刪除第一個(gè)元素,刪除最后一個(gè)元素,列表中只剩一個(gè)元素/*** 刪除鏈表中某個(gè)索引的節(jié)點(diǎn)* @param index*/public void deleteNode(int index){if(isEmpty()){System.out.println("鏈表為空~~");return;}if(index < 0 || index >= size){System.out.println("刪除鏈表節(jié)點(diǎn)的索引范圍必須在 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;}//如果是刪除最后一個(gè)元素 temp.next == null --》 temp.next.prev = temp.prev; 這條邏輯語(yǔ)句就不用走if(temp.next != null){temp.next.prev = temp.prev;}temp.prev.next = temp.next;}--size; // 鏈表長(zhǎng)度 - 1}public void printList(){if(isEmpty()){System.out.println("鏈表為空~~~");}HeroNode2 temp = head.next;while (temp != null){System.out.println(temp);temp = temp.next;}}/*** 判斷鏈表的元素個(gè)數(shù)是否為空* @return*/public boolean isEmpty(){return size == 0;}/*** 將新節(jié)點(diǎn)插入在鏈表的某個(gè)索引上,原先在該索引的節(jié)點(diǎn)后移* @param index* @param newNode*/public void insertNode(int index,HeroNode2 newNode){if(index < 0 || index >= size){System.out.println("插入鏈表節(jié)點(diǎn)的索引范圍必須在 0 <= index < " + size);return;}if(index == 0){insertNodeToHead(newNode);}else{//確定原先在該索引上的元素//在這里我們首先要 找到 鏈表在 index這個(gè)索引值下 的節(jié)點(diǎn)//index = 1 ==>直接找鏈表的第2個(gè)元素開(kāi)始算起HeroNode2 temp = head.next.next;int currentIndex = 1;while(temp != null){if(currentIndex == index){//前一部分 【temp.prev】 的 next節(jié)點(diǎn) ==》 newNode; newNode.prev ==> 【temp.prev】temp.prev.next = newNode;newNode.prev = temp.prev;//后一部分 新節(jié)點(diǎn) 與 【temp】 節(jié)點(diǎn)的關(guān)系建立newNode.next = temp;temp.prev = newNode;break;}temp = temp.next;++currentIndex;}++size; //鏈表長(zhǎng)度+1}}/*** 將新節(jié)點(diǎn)插入到鏈表中,此新節(jié)點(diǎn)是鏈表的第一個(gè)元素* @param newNode*/public void insertNodeToHead(HeroNode2 newNode){HeroNode2 temp = head.next;head.next = newNode; //頭節(jié)點(diǎn) 的下一個(gè)節(jié)點(diǎn) 指向===> 新節(jié)點(diǎn)newNode.next = temp; //新節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn) 指向 原先鏈表的第一個(gè)節(jié)點(diǎn)temptemp.prev = newNode; //原先鏈表的第一個(gè)節(jié)點(diǎn) 的前一個(gè)節(jié)點(diǎn)指向 新節(jié)點(diǎn)++size; //鏈表長(zhǎng)度+1}public static void main(String[] args) {DoubleLinkedList linkedList = new DoubleLinkedList();HeroNode2 node1 = new HeroNode2(1,"曹操","孟德");HeroNode2 node2 = new HeroNode2(2,"關(guān)羽","云長(zhǎng)");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("============================");
// //刪除第一個(gè)元素
// 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();}}
?
總結(jié)
以上是生活随笔為你收集整理的双向链表(java语言实现)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ①Linux简明系统编程(嵌入式公众号的
- 下一篇: 2019春学习总结