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; } @Overridepublic String toString() {return "HeroNode{" +"no=" + no +", name='" + name + '\'' +", nickName='" + nickName + '\'' +'}'; }}
二、双向链表的操作 1、双向链表的插入操作
【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、双向链表的删除操作
文章图片
/*** 根据编号删除节点* 双向链表找到对应的节点直接删除* @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实现线程通信的案例讲解
- java模拟实现双向链表
- Java技术指南「并发编程专题」针对于Guava RateLimiter限流器的入门到精通(含实
- PopStar(消灭星星)游戏源代码下载分析及跨平台移植—第一篇(界面)
- angular中使用ngzorro组件库实现表格拖拽控制每列大小功能
- 用开源github,还是咱中国自己的代码托管平台云效()
- 用keepalived实现Samba高可用
- Go语言实现控制台输入&生成随机数详解
- Java深入讲解二十三种设计模式之中的策略模式
- SpringBoot通过ThreadLocal实现登录拦截详解流程