这篇文章主要介绍“怎么用java代码实现双向链表”,在日常操作中,相信很多人在怎么用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; } @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; } //如果没有找到最后 temp后移 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; } //找到修改节点的上一个节点 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代码实现双向链表”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。