java代码实现双向链表

本文实例为大家分享了双向链表java实现代码,供大家参考,具体内容如下
一、双向链表简介 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; } @Overridepublic String toString() {return "HeroNode{" +"no=" + no +", name='" + name + '\'' +", nickName='" + nickName + '\'' +'}'; }}

二、双向链表的操作 1、双向链表的插入操作
【java代码实现双向链表】java代码实现双向链表
文章图片

//添加节点到单向链表//1. 找到当前链表的最后节点//2. 将最后这个节点的next指定新节点public void add(HeroNode2 heroNode) {//因为head节点不能动,所以需要一个辅助变量tempHeroNode2 temp = head; while (true) {//根据是否有下个节点判断 是否到了链表动最后if (temp.next == null) {break; }//如果没有找到最后 temp后移temp = temp.next; }//当退出循环时,temp就指向了链表的最后位置//当最后这个节点的next 指向新的节点//新节点的上一个节点指向temptemp.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("没有对应的节点无法删除"); }}}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    推荐阅读