Rumah  >  Artikel  >  Java  >  Bagaimana untuk melaksanakan senarai terpaut dua hala menggunakan kod java

Bagaimana untuk melaksanakan senarai terpaut dua hala menggunakan kod java

王林
王林ke hadapan
2023-05-02 23:49:051501semak imbas

1. Pengenalan kepada senarai terpaut berganda

1 Kecacatan senarai pautan tunggal

Senarai terpaut tunggal hanya boleh mengakses elemen data dalam senarai terpaut bermula dari nod kepala. Jika anda perlu membalikkan susunan Mengakses elemen data dalam senarai pautan tunggal akan menjadi sangat tidak cekap.

2. Struktur senarai terpaut berganda

Senarai terpaut berganda ialah jenis senarai terpaut, yang terdiri daripada nod data mempunyai dua penunjuk kepada Pengganti langsung dan pendahulu langsung.

Bagaimana untuk melaksanakan senarai terpaut dua hala menggunakan kod java

3. Struktur asas kelas senarai terpaut berganda

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

2

1. Operasi sisipan senarai terpaut berganda

//添加节点到单向链表
        //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;
        }
Bagaimana untuk melaksanakan senarai terpaut dua hala menggunakan kod java

2. Operasi pemadaman senarai terpaut berganda

 /**
         * 根据编号删除节点
         * 双向链表找到对应的节点直接删除
         * @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("没有对应的节点无法删除");
            }
        }
}

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan senarai terpaut dua hala menggunakan kod java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam