java代碼實現(xiàn)雙向鏈表
本文實例為大家分享了雙向鏈表java實現(xiàn)代碼,供大家參考,具體內(nèi)容如下
一、雙向鏈表簡介
1、單鏈表的缺陷
單鏈表只能從頭結(jié)點開始訪問鏈表中的數(shù)據(jù)元素,如果需要逆序訪問單鏈表中的數(shù)據(jù)元素將極其低效。
2、雙向鏈表的結(jié)構(gòu)
雙鏈表是鏈表的一種,由節(jié)點組成,每個數(shù)據(jù)結(jié)點中都有兩個指針,分別指向直接后繼和直接前驅(qū)。
3、雙向鏈表類的基本結(jié)構(gòu)
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é)點 ? ? ? ? ?* 雙向鏈表找到對應(yīng)的節(jié)點直接刪除 ? ? ? ? ?* @param no 節(jié)點編號 ? ? ? ? ?*/ ? ? ? ? public void deleteByNo(int no) { ? ? ? ? ? ? //判斷是否鏈表為空 ? ? ? ? ? ? if (head.next == null) { ? ? ? ? ? ? ? ? System.out.println("鏈表為空"); ? ? ? ? ? ? ? ? return; ? ? ? ? ? ? } ? ? ? ? ? ? HeroNode2 temp = head; ? ? ? ? ? ? //設(shè)置標識 ? ? ? ? ? ? boolean flag = false; ? ? ? ? ? ? while (true) { ? ? ? ? ? ? ? ? //已經(jīng)遍歷到鏈表尾 ? ? ? ? ? ? ? ? if (temp == null) { ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? //找到修改節(jié)點的上一個節(jié)點 ? ? ? ? ? ? ? ? if (temp.no == no) { ? ? ? ? ? ? ? ? ? ? flag = true; ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? temp = temp.next; ? ? ? ? ? ? } ? ? ? ? ? ? ? //找到對應(yīng)的節(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("沒有對應(yīng)的節(jié)點無法刪除"); ? ? ? ? ? ? } ? ? ? ? } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot validator參數(shù)驗證restful自定義錯誤碼響應(yīng)方式
這篇文章主要介紹了SpringBoot validator參數(shù)驗證restful自定義錯誤碼響應(yīng)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10java網(wǎng)絡(luò)之基于UDP的聊天程序示例解析
這篇文章主要介紹了java網(wǎng)絡(luò)之基于UDP的聊天程序示例解析,文中通過步驟及示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08Spring通過<import>標簽導(dǎo)入外部配置文件
之前文章里我們講到Spring加載Xml配置文件的細節(jié),那么加載完了我們肯定要解析這個配置文件中定義的元素。這篇我們首先來分析下Spring是如何通過標簽導(dǎo)入外部配置文件的。2021-06-06Spring深入分析講解BeanUtils的實現(xiàn)
java知識體系統(tǒng)有很多數(shù)據(jù)實體,比較常用的DTO、BO、DO、VO等,其他類似POJO概念太老了現(xiàn)在基本廢棄掉了,本篇幅直接忽略,對于這幾種數(shù)據(jù)實體各自代表的含義和應(yīng)用場景先做一下簡單描述和分析2022-06-06深入理解JavaWeb中過濾器與監(jiān)聽器的應(yīng)用
這篇文章主要介紹了JavaWeb中過濾器與監(jiān)聽器的應(yīng)用,過濾器能夠?qū)ζヅ涞恼埱蟮竭_目標之前或返回響應(yīng)之后增加一些處理代碼,監(jiān)聽器是一個接口內(nèi)容由我們實現(xiàn),會在特定時間被調(diào)用,感興趣想要詳細了解可以參考下文2023-05-05Java實現(xiàn)批量向mysql寫入數(shù)據(jù)的方法
這篇文章主要介紹了Java實現(xiàn)批量向mysql寫入數(shù)據(jù)的方法,涉及java基于JDBC連接mysql數(shù)據(jù)庫及寫入數(shù)據(jù)的相關(guān)操作技巧,非常簡單實用,需要的朋友可以參考下2017-12-12Java?Chassis3應(yīng)用視角的配置管理技術(shù)解密
這篇文章主要為大家介紹了Java?Chassis3應(yīng)用視角的配置管理相關(guān)的機制和背后故事,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01