java代碼實現(xiàn)雙向鏈表
本文實例為大家分享了雙向鏈表java實現(xiàn)代碼,供大家參考,具體內容如下
一、雙向鏈表簡介
1、單鏈表的缺陷
單鏈表只能從頭結點開始訪問鏈表中的數(shù)據(jù)元素,如果需要逆序訪問單鏈表中的數(shù)據(jù)元素將極其低效。
2、雙向鏈表的結構
雙鏈表是鏈表的一種,由節(jié)點組成,每個數(shù)據(jù)結點中都有兩個指針,分別指向直接后繼和直接前驅。

3、雙向鏈表類的基本結構
class HeroNode2 {
? ? ? ? //編號
? ? ? ? public int no;
? ? ? ? //名稱
? ? ? ? public String name;
? ? ? ? //昵稱
? ? ? ? public String nickName;
? ? ? ? //下個節(jié)點編碼
? ? ? ? public HeroNode2 next;
? ? ? ? //上一個節(jié)點
? ? ? ? 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、雙向鏈表的插入操作

//添加節(jié)點到單向鏈表
? ? ? ? //1. 找到當前鏈表的最后節(jié)點
? ? ? ? //2. 將最后這個節(jié)點的next指定新節(jié)點
? ? ? ? public void add(HeroNode2 heroNode) {
? ? ? ? ? ? //因為head節(jié)點不能動,所以需要一個輔助變量temp
? ? ? ? ? ? HeroNode2 temp = head;
? ? ? ? ? ? while (true) {
? ? ? ? ? ? ? ? //根據(jù)是否有下個節(jié)點判斷 是否到了鏈表動最后
? ? ? ? ? ? ? ? if (temp.next == null) {
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? //如果沒有找到最后 temp后移
? ? ? ? ? ? ? ? temp = temp.next;
? ? ? ? ? ? }
? ? ? ? ? ? //當退出循環(huán)時,temp就指向了鏈表的最后位置
? ? ? ? ? ? //當最后這個節(jié)點的next 指向新的節(jié)點
? ? ? ? ? ? //新節(jié)點的上一個節(jié)點指向temp
? ? ? ? ? ? temp.next = heroNode;
? ? ? ? ? ? heroNode.pre = temp;
? ? ? ? }2、雙向鏈表的刪除操作

?/**
? ? ? ? ?* 根據(jù)編號刪除節(jié)點
? ? ? ? ?* 雙向鏈表找到對應的節(jié)點直接刪除
? ? ? ? ?* @param no 節(jié)點編號
? ? ? ? ?*/
? ? ? ? public void deleteByNo(int no) {
? ? ? ? ? ? //判斷是否鏈表為空
? ? ? ? ? ? if (head.next == null) {
? ? ? ? ? ? ? ? System.out.println("鏈表為空");
? ? ? ? ? ? ? ? return;
? ? ? ? ? ? }
? ? ? ? ? ? HeroNode2 temp = head;
? ? ? ? ? ? //設置標識
? ? ? ? ? ? boolean flag = false;
? ? ? ? ? ? while (true) {
? ? ? ? ? ? ? ? //已經(jīng)遍歷到鏈表尾
? ? ? ? ? ? ? ? if (temp == null) {
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? //找到修改節(jié)點的上一個節(jié)點
? ? ? ? ? ? ? ? if (temp.no == no) {
? ? ? ? ? ? ? ? ? ? flag = true;
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? temp = temp.next;
? ? ? ? ? ? }
?
? ? ? ? ? ? //找到對應的節(jié)點
? ? ? ? ? ? if (flag) {
? ? ? ? ? ? ? ? //找到要刪除節(jié)點的上一個節(jié)點 將刪除節(jié)點的下一個節(jié)點 綁定為中間變量的下一個節(jié)點
? ? ? ? ? ? ? ? temp.pre.next=temp.next;
? ? ? ? ? ? ? ? if (temp.next!=null){
? ? ? ? ? ? ? ? ? ? temp.next.pre=temp.pre;
? ? ? ? ? ? ? ? }
?
?
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? System.out.println("沒有對應的節(jié)點無法刪除");
? ? ? ? ? ? }
? ? ? ? }
}以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
SpringBoot validator參數(shù)驗證restful自定義錯誤碼響應方式
這篇文章主要介紹了SpringBoot validator參數(shù)驗證restful自定義錯誤碼響應方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
Spring深入分析講解BeanUtils的實現(xiàn)
java知識體系統(tǒng)有很多數(shù)據(jù)實體,比較常用的DTO、BO、DO、VO等,其他類似POJO概念太老了現(xiàn)在基本廢棄掉了,本篇幅直接忽略,對于這幾種數(shù)據(jù)實體各自代表的含義和應用場景先做一下簡單描述和分析2022-06-06
Java實現(xiàn)批量向mysql寫入數(shù)據(jù)的方法
這篇文章主要介紹了Java實現(xiàn)批量向mysql寫入數(shù)據(jù)的方法,涉及java基于JDBC連接mysql數(shù)據(jù)庫及寫入數(shù)據(jù)的相關操作技巧,非常簡單實用,需要的朋友可以參考下2017-12-12

