java代码实现双向链表(java中双向链表的实现类)

网友投稿 408 2022-07-28


本文实例为大家分享了双向链表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;

}

@Override

public String toString() {

return "HeroNode{" +

"no=" + no +

", name='" + name + '\'' +

", nickName='" + nickName + '\'' +

'}';

}

}

二、双向链表的操作

1、双向链表的插入操作

//添加节点到单向链表

//1. 找到当前链表的最后节点

//2. 将最后这个节点的next指定新节点

public void add(HeroNode2 heroNode) {

//因为head节点不能动,所以需要一个辅助变量temp

HeroNode2 temp = head;

while (true) {

//根据是否有下个节点判断 是否到了链表动最后

if (temp.next == null) {

break;

}

//如果没有找到最后 temcJLowxp后移

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;

}

http:// //找到修改节点的上一个节点

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

}

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:springboot vue测试平台接口定义及发送请求功能实现
下一篇:Java实现线程通信的案例讲解(java线程间通信)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~