文章目录

  • 节点类
  • 链表类
  • 测试类

双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。


节点类

//节点类
class DNode {//数据域public int id;public String name;//指针域public DNode next; //指向后一个节点public DNode pre; //指向前一个节点public DNode(int id, String name) {this.id = id;this.name = name;}@Overridepublic String toString() {return "Node{" +"id=" + id +", name='" + name + '\'' +'}';}
}

链表类

//链表类(管理节点)
class DoubleLinkedList {//头节点private DNode head = new DNode(0,null);//展示链表public void list(){if (head.next == null){System.out.println("链表为空!");return;}DNode temp = head.next;while (true){if (temp == null){break;}System.out.println(temp);temp = temp.next;}}//增(在链表尾部)public void add1(DNode newNode){//因为头节点不能动,因此要一个辅助变量tempDNode temp = head;//遍历找到最后while (true){if (temp.next == null){break;}temp = temp.next;}//当退出while就意味着找到最后一个节点了temp.next = newNode;newNode.pre = temp;}//删(根据id匹配删除)public void remove(int id){if (head.next == null){System.out.println("链表为空!");return;}DNode temp = head.next;boolean flag = false; //用来标记是否找到对应id的节点while (true){if (temp == null){break;}if (temp.id == id){ //找到要删除节点的前一个节点flag = true;break;}temp = temp.next;}if (flag){temp.pre.next = temp.next; //该节点前一个节点的next指向该节点后一个节点if (temp.next != null){ //只有当删除的节点不是最后一个节点时才需要执行下面,否则空指针异常temp.next.pre = temp.pre; //该节点后一个节点的pre指向该节点前一个节点}}else {System.out.println("没有找到要删除的节点,删除失败!");}}//改(根据id匹配要修改的节点)public void update(int id,String name){if (head.next == null){System.out.println("链表为空!");return;}DNode temp = head.next;boolean flag = false; //用来标记是否找到对应id的节点while (true){if (temp == null){break;}if (temp.id == id){flag = true;break;}temp = temp.next;}if (flag){temp.name = name;}else {System.out.println("没有找到要修改的节点,修改失败!");}}//查(根据id匹配)public DNode show(int id){if (head.next == null){System.out.println("链表为空!");return null;}DNode temp = head.next;boolean flag = false;while (true){if (temp == null){break;}if (temp.id == id){flag = true;break;}temp = temp.next;}if (flag){return temp;}else {System.out.println("没有找到要查找的节点,查找失败!");return null;}}}

测试类

/*** @Author: Yeman* @Date: 2021-10-15-20:20* @Description:*/
public class DoubleLinkedListTest {public static void main(String[] args) {DoubleLinkedList doubleLinkedList = new DoubleLinkedList();DNode node1 = new DNode(1, "阿兰");DNode node2 = new DNode(2, "洛国富");DNode node3 = new DNode(3, "艾克森");doubleLinkedList.add1(node1);doubleLinkedList.add1(node2);doubleLinkedList.add1(node3);doubleLinkedList.list();//        doubleLinkedList.remove(3); //删
//        doubleLinkedList.update(3,"张玉宁"); //改
//        System.out.println(doubleLinkedList.show(3)); //查doubleLinkedList.list();}
}

逆向行驶!数据结构双向链表DoubleLinkedList,Java实现增删改查相关推荐

  1. 极客技术专题【003期】:java mvc 增删改查 自动生成工具来袭

    日期:2013-4-17  来源:GBin1.com 技术专题介绍 分享专题:java mvc 增删改查 自动生成工具来袭 分享人:激情燃烧的UI 授课时间:2013/04/19  21:00-22: ...

  2. HBase java 的增删改查

    HBase java 的增删改查 . 目前来看好像是我的最全了,应该是大佬不屑于写这种的吧 . 其实本来想写很多方法的,但是写着写着就有点烦了,再加上本人也不全是闲人一个,然后就给停了,看着有点乱,但 ...

  3. java mongodb 增删改查_java操作mongodb:基本的增删改查

    java操作mongodb的代码,包含基本的增删改查操作 获取数据库连接工具类 package com.liuc.db;import java.net.UnknownHostException;imp ...

  4. java pdf增删改查_如何利用Java代码操作索引库?

    今天是刘小爱自学Java的第161天. 感谢你的观看,谢谢你. 学习计划安排如下: 学了几天的Elasticserch,但都是它本身的知识点,如何通过Java语言去操作它呢? 这就好比以前学数据库,在 ...

  5. java定时任务增删改查_python实现crontab定时任务的增删改查

    python实现crontab定时任务的增删改查 python实现crontab定时任务的增删改查 本人主要业务方向是后台,在开发不同版本迭代或者项目的部署时,每次都手动去创建cron定时任务,很不符 ...

  6. java addservlet_servlet增删改查

    Servlet 使用Servlet进行增删改查 步骤 1.  导入以下几个jar包到WEB-INF下的lib包里,必要时build path,其中jstl.jar和standard.jar是使用jst ...

  7. java实现增删改查_java大作业,实现学生信息增删改查

    [实例简介] 编写Web应用程序(JavaEE平台上的应用,能够运行在Tomcat服务器上),实现学生信息的增删改查. 在Web页面上实现添加一个学生记录,删除某个学生记录,修改某个学生记录,和按照姓 ...

  8. JAVA JDBC 增删改查简单例子

    1.数据库配置文件jdbc.properties driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test username= ...

  9. flex通过blazeds与java实现增删改查-整个实现流程

    1,建一个userdb库,再建userinfo表,字段:id(int),username(varchar),password(varchar). 2,DBConnection.java package ...

最新文章

  1. 取特定字符串后的数字 linux_Linux相关操作(四)
  2. 【Accelerated C++】重点回顾
  3. Windows anaconda python3 import ssl报错的解决方案
  4. Android Animation动画效果简介
  5. ces测试数据测试ces测试数据测试ces测试数据测试ces测试数据测试ces测试数据测试撒擦撒擦是
  6. 系统运维:收集6款经典的服务器监控工具
  7. Class Diagram
  8. python求解微分方程组_python – SymPy / SciPy:求解具有不同变量的常微分方程组...
  9. proxy跨域不生效_前端开发:深入使用proxy代理解决跨域问题
  10. Shanda EZ Mini
  11. linux无线网卡模拟ap,TP-Link无线网卡怎么设置虚拟AP
  12. Spring-Cloud之Spring Cloud Netflix Eureka服务注册与发现
  13. yourshelf是什么意思中文_shelf是什么意思中文
  14. 连手机热点宿主机无法连上VMvare linux Centos
  15. zgb老师关于java集合的总结
  16. 提取FBX文件中mesh的信息
  17. sklearn库:分类、回归、聚类、降维、模型优化、文本预处理实现用例(赶紧收藏)
  18. Animator 播放多片段动画
  19. 安装软件时出现没有自注册或撤销注册怎么办
  20. [乐意黎原创] 解决被强制篡改主页为流氓360首页的方法

热门文章

  1. 查看Servlet 3.0的新增功能
  2. Java内部具有原子更新的动态热交换环境
  3. MapReduce:处理数据密集型文本处理–局部聚合第二部分
  4. 为什么要编写单元测试–测试技巧8
  5. Xuggler视频处理简介
  6. Struts2的配置文件struts.xml的模板
  7. MacOS安装pip失败,提示:SyntaxError: invalid syntax
  8. MySQL的set names命令详解
  9. air java,Java Bean
  10. mysql 如何凭借几个列_我如何总结MySQL中的几个列