java代碼實現雙向鏈表
本文實例為大傢分享瞭雙向鏈表java實現代碼,供大傢參考,具體內容如下
一、雙向鏈表簡介
1、單鏈表的缺陷
單鏈表隻能從頭結點開始訪問鏈表中的數據元素,如果需要逆序訪問單鏈表中的數據元素將極其低效。
2、雙向鏈表的結構
雙鏈表是鏈表的一種,由節點組成,每個數據結點中都有兩個指針,分別指向直接後繼和直接前驅。
3、雙向鏈表類的基本結構
class HeroNode2 { //編號 public int no; //名稱 public String name; //昵稱 public String nickName; //下個節點編碼 public HeroNode2 next; //上一個節點 public HeroNode2 pre; public HeroNode2(int no, String name, String nickName) { this.no = no; this.name = name; this.nickName = nickName; } public HeroNode2(int no, String name) { this.no = no; this.name = name; } @Override public String toString() { return "HeroNode{" + "no=" + no + ", name='" + name + '\'' + ", nickName='" + nickName + '\'' + '}'; } }
二、雙向鏈表的操作
1、雙向鏈表的插入操作
//添加節點到單向鏈表 //1. 找到當前鏈表的最後節點 //2. 將最後這個節點的next指定新節點 public void add(HeroNode2 heroNode) { //因為head節點不能動,所以需要一個輔助變量temp HeroNode2 temp = head; while (true) { //根據是否有下個節點判斷 是否到瞭鏈表動最後 if (temp.next == null) { break; } //如果沒有找到最後 temp後移 temp = temp.next; } //當退出循環時,temp就指向瞭鏈表的最後位置 //當最後這個節點的next 指向新的節點 //新節點的上一個節點指向temp temp.next = heroNode; heroNode.pre = temp; }
2、雙向鏈表的刪除操作
/** * 根據編號刪除節點 * 雙向鏈表找到對應的節點直接刪除 * @param no 節點編號 */ public void deleteByNo(int no) { //判斷是否鏈表為空 if (head.next == null) { System.out.println("鏈表為空"); return; } HeroNode2 temp = head; //設置標識 boolean flag = false; while (true) { //已經遍歷到鏈表尾 if (temp == null) { break; } //找到修改節點的上一個節點 if (temp.no == no) { flag = true; break; } temp = temp.next; } //找到對應的節點 if (flag) { //找到要刪除節點的上一個節點 將刪除節點的下一個節點 綁定為中間變量的下一個節點 temp.pre.next=temp.next; if (temp.next!=null){ temp.next.pre=temp.pre; } } else { System.out.println("沒有對應的節點無法刪除"); } } }
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。
推薦閱讀:
- java實現雙向鏈表的增刪改
- Java數據結構之鏈表詳解
- Java實現單鏈表SingleLinkedList增刪改查及反轉 逆序等
- java數據結構基礎:單鏈表與雙向鏈表
- java數據結構基礎:循環鏈表和棧