首頁  >  文章  >  Java  >  怎麼用java程式碼實作雙向鍊錶

怎麼用java程式碼實作雙向鍊錶

王林
王林轉載
2023-05-02 23:49:051457瀏覽

一、雙向鍊錶簡介

1、單鍊錶的缺陷

單鍊錶只能從頭接點開始存取鍊錶中的資料元素,如果需要逆序存取單鍊錶中的資料元素將極為低效。

2、雙向鍊錶的結構

雙鍊錶是鍊錶的一種,由節點組成,每個資料結點中都有兩個指針,分別指向直接後繼和直接前驅。

怎麼用java程式碼實作雙向鍊錶

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 + '\'' +
                    '}';
        }
    }

二、雙向鍊錶的操作

怎麼用java程式碼實作雙向鍊錶

怎麼用java程式碼實作雙向鍊錶

############################################################################################### #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("没有对应的节点无法删除");
            }
        }
}

以上是怎麼用java程式碼實作雙向鍊錶的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除