>  기사  >  Java  >  Java 코드를 사용하여 양방향 연결 목록을 구현하는 방법

Java 코드를 사용하여 양방향 연결 목록을 구현하는 방법

王林
王林앞으로
2023-05-02 23:49:051500검색

1. 이중 연결 목록 소개

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

2. 이중 연결 리스트의 연산

1 이중 연결 리스트의 삽입 연산

Java 코드를 사용하여 양방향 연결 목록을 구현하는 방법

//添加节点到单向链表
        //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. 이중 연결 리스트 삭제 작업

Java 코드를 사용하여 양방향 연결 목록을 구현하는 방법

 /**
         * 根据编号删除节点
         * 双向链表找到对应的节点直接删除
         * @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으로 문의하시기 바랍니다. 삭제