java实现简单的双向链表
public class DoubleLinkedListDemo {public static void main(String[] args) {System.out.println("双向链表的测试");HeroNode2 hero1 = new HeroNode2(1, "宋江", "及时雨");HeroNode2 hero2 = new HeroNode2(2, "卢金义", "玉麒麟");HeroNode2 hero3 = new HeroNode2(3, "吴用", "智多星");HeroNode2 hero4 = new HeroNode2(4, "林冲", "豹子头");//创建一个双向链表对象DoubleLinkedList doubleLinkedList = new DoubleLinkedList();doubleLinkedList.add(hero1);doubleLinkedList.add(hero2);doubleLinkedList.add(hero3);doubleLinkedList.add(hero4);doubleLinkedList.list();//修改HeroNode2 hero5 = new HeroNode2(4, "公孙胜", "入云龙");doubleLinkedList.update(hero5);System.out.println("修改后的链表测试");doubleLinkedList.list();//删除doubleLinkedList.delete(3);System.out.println("删除后的链表情况");doubleLinkedList.list();}static class DoubleLinkedList {private HeroNode2 head = new HeroNode2(0, "", "");public HeroNode2 getHead() {return head;}/*** 遍历显示链表*/public void list() {if (head.next == null) {System.out.println("链表为空");return;}HeroNode2 temp = head.next;while (true) {//判断链表是否到最后if (temp == null) {break;}System.out.println(temp);temp = temp.next;}}public void add(HeroNode2 heroNode) {HeroNode2 temp = head;while (true) {if (temp.next == null) {break;}temp = temp.next;}//形成一个双向链表,形成一个节点到双向链表的最后temp.next = heroNode;heroNode.pre = temp;}/*** 第一个方法肯定是有序的添加数据,也可以叫插入* 加入的是对象,即链表的一个部分*/public void addOrder(HeroNode2 heroNode) {//1.我们需要一个辅助指针帮助遍历,让它成为头结点HeroNode2 temp = head;//2.需要标志flag来判断数据是否可添加boolean flag = false;//在将数据插入链表时,会有三种情况//单纯的while-true 必须在每个条件下都加入breakwhile (true) {//如果temp指向了null 说明链表已经到了尾部,直接退出循环if (temp.next == null) {break;}//如果temp指向的节点序号大于要插入的节点,说明找到了插入的位置if (temp.next.num > heroNode.num) {break;}//如果temp指向的节点序号等于要插入的节点,说明这个节点已经插入过if (temp.next.num == heroNode.num) {//那么此时我们将flag改成true,以便下文flag = true;break;}//如果三种情况都没发生,那么指针下移temp = temp.next;}//如果是因为已经存在而终止循环,那么if (flag) {System.out.printf("已经存在%d", heroNode.num);}//如果是正常到了插入的位置,要进行链表独有的三方会转else {heroNode.next = temp.next;temp.next = heroNode;}}//链表的修改,修改一个节点的内容,和单向链表一样public void update(HeroNode2 newHeroNode) {if (head.next == null) {System.out.println("链表为空");return;}HeroNode2 temp = head.next;boolean flag = false;while (true) {if (temp == null) {break;}if (temp.num == newHeroNode.num) {flag = true;break;} else {temp = temp.next;}}if (flag) {temp.nickname = newHeroNode.nickname;temp.name = newHeroNode.name;} else {System.out.println("没有扎到");}}/*** 添加之后是删除,这里定义的就肯定不是你想删除的对象了* 而是你想删除对象的序号即可,即以属性代表目标* 对于双向链表,可以直接找到要删除的节点,而不是前一个节点* 找到后自我删除即可*/public void delete(int num) {//判断当前链表是否为空if (head.next == null) {System.out.println("链表为空,无法删除");return;}//1.定义一个辅助指针HeroNode2 temp = head.next;//2.定义标志flag判断数据是否可添加boolean flag = false;while (true) {//已经到了链表的最后节点的nextif (temp == null) {break;}//找到带删除结点的前一个节点,只有这一个条件是正确的if (temp.num == num) {flag = true;break;}//后移,遍历temp = temp.next;}//找到了这个节点if (flag) {//temp.next = temp.next.next;temp.pre.next = temp.next;//代码有风险,如果temp是最后一个节点,会出现空指针异常if (temp.next != null) {temp.next.pre = temp.pre;}} else {System.out.printf("要删除的%d节点不存在", num);}}}/*** 这是一个链表类,每个HeroNode就是一个节点* 在这里需要定义我们需要的链表的一些属性* 比如此链表定义了num,name,nickname* 当然最重要的是定义指向下一个节点的next*/static class HeroNode2 {public int num;public String name;public String nickname;public HeroNode2 next;public HeroNode2 pre;/*** 链表类的第一个方法当然是创建链表,这里显然利用构造方法* 对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。*/public HeroNode2(int num, String name, String nickname) {this.num = num;this.name = name;this.nickname = nickname;}/*** 接着重写一个toString方法,目的是返回对象的内容*/@Overridepublic String toString() {return "HeroNode{" +"num=" + num +", name='" + name + '\'' +", nickname='" + nickname + '\'' +'}';}}
}
java实现简单的双向链表相关推荐
- Java模拟一个简单的双向链表
Java模拟一个简单的双向链表 1.链表结构 Node实体类代码: public class Node {public Object item;//存放数据的地方public Node next;// ...
- java简单通讯录的实现02person类_用java实现简单的小游戏(你一定玩过)
用java实现简单的小游戏(你一定玩过) 对于java初学者来说,通过一些学习小游戏来对swing学习以及对java基础的学习是一个好的方法,同时也给学习带来了很多的乐趣,接下来就给大家分享一个jav ...
- java实现简单窗体小游戏----球球大作战
java实现简单窗体小游戏----球球大作战 需求分析 1.分析小球的属性: 坐标.大小.颜色.方向.速度 2.抽象类:Ball 设计类:BallMain-创建窗体 BallJPanel- ...
- Java JNI简单实现
Java JNI简单实现 JNI(Java Native Interface)允许了Java和C&C++进行交互?这不折腾人嘛! 一.JNI简述 http://baike.baidu.com/ ...
- java实现账号单一ip登录,使用Java实现简单后台访问并获取IP示例
使用Java实现简单后台访问并获取IP示例 发布时间:2020-10-28 21:57:57 来源:亿速云 阅读:92 作者:Leah 使用Java实现简单后台访问并获取IP示例?针对这个问题,这篇文 ...
- 用limit 实现java的简单分页
https://blog.csdn.net/xinyuezitang/article/details/84324359 用limit 实现java的简单分页 xinyuezitang 2018-11- ...
- redis java应用_redis在JAVA的简单应用
reids是一个高性能的key-value数据库.它存储的value支持各种类型的数据,如String,List,set,hash类型.在此基础上,各种不同方式的排序. 本文不具体争对redis数据库 ...
- java实现简单的约瑟夫环问题
我自己学习数据结构的时候,总希望能找到很简单的入门代码,可总是很难找到,于是就想到能写一些简单的java代码. 在百度百科上面搜索到约瑟夫环的问题时,并没有发现java的简单实现,自己在下面弄也是弄 ...
- Java Kafka 简单示例
Java Kafka 简单示例 简介 Java kafka 简单代码示例 maven依赖配置 <!-- kafka --> <dependency><groupI ...
最新文章
- Serverless Kubernetes:理想,现实与未来
- 阅读笔记五2017.2.13
- high-speed A/D performance metrics and Amplifie...
- Qt creator5.7 OpenCV249之pyrUp函数(含源码下载)
- ELV局部视图与差分隐私【敏感度到底怎么理解】【上】
- 【SparkStreaming学习之二】 SparkStreaming算子操作
- JavaScript学习(四十五)—练习题
- java api 获取jvm实例_JVMTI那些事——和Java相互调用
- sql转java对象_关于hibernate中使用sql语句时,类对象的转换问题。
- Java面试题-Java中的锁
- django03配置相关
- 2021年上半年数据库系统工程师下午真题及答案解析
- nagios监控详解
- oracle vm 强制关机,[已解决]Virtualbox安装archlinux过程中客户机和宿主机全部卡死...
- 十字链表画法——蓝墨云班课实践改错
- 神经网络利用哪种算法将损失函数的值降到最低
- 免费数据 | CnOpenData国际足球比赛结果数据
- 15个Python入门小程序,同事准时下班“小技巧”被我发现了
- ubuntu英文版变成中文版
- 商业研究(16):实体经济之殇,互联网经济之困?