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。

推薦閱讀: