双向链表的增删改查

和单链表的操作很像:https://blog.csdn.net/weixin_43304253/article/details/119758276
基本结构

1、增加操作

  • 1、链接cur与pre和next,其中的next是pre的下一个节点

  • 2、用cur重新连接


在尾部添加代码实现

  //添加 从尾部添加

    public void addEnd(Student1 student1){
Student1 temp=head1;//辅助 while(true){
if(temp.next==null){
break;
}
temp=temp.next;
}
//找到链表最后
temp.next=student1;//将最后的节点指向指向新的节点
student1.pre=temp;//将最后的节点作为新节点的前一个指向 }

2、删除操作
1、确定待删除的元素

2、修改指向

删除的代码实现


//删除
public void deleteNode(int num){
Student1 temp=head1.next; while (true){
if(temp==null){
System.out.println("链表为空");
return;
} if(temp.id==num){ //找到待删除的节点
temp.pre.next=temp.next;
temp.pre=temp.next.pre;//如果删除的是最后的元素则会出现风险
break; }
temp=temp.next;
}
}

实例:
双向链表存储学生的信息

package com.zheng.demo3;

public class MyDoubleLinkList {
public static void main(String[] args) {
//定义节点
Student1 student1 = new Student1(1, "小明", "男");
Student1 student2 = new Student1(2, "小红", "女");
Student1 student3 = new Student1(3, "小黑", "男");
Student1 student4 = new Student1(4, "小青", "女"); DoubleLinkList doubleLinkList = new DoubleLinkList();
doubleLinkList.addEnd(student1);
doubleLinkList.addEnd(student2);
doubleLinkList.addEnd(student3);
doubleLinkList.addEnd(student4); System.out.println("遍历双向链表");
doubleLinkList.queryLinkList(); doubleLinkList.deleteNode(3);
System.out.println("删除id为3的节点");
doubleLinkList.queryLinkList();
} } class DoubleLinkList{ private Student1 head1=new Student1(0,"",""); //添加 从尾部添加 public void addEnd(Student1 student1){
Student1 temp=head1;//辅助 while(true){
if(temp.next==null){
break;
}
temp=temp.next;
}
//找到链表最后
temp.next=student1;//将最后的节点指向指向新的节点
student1.pre=temp;//将最后的节点作为新节点的前一个指向 } //删除
public void deleteNode(int num){
Student1 temp=head1.next; while (true){
if(temp==null){
System.out.println("链表为空");
return;
} if(temp.id==num){ //找到待删除的节点
temp.pre.next=temp.next;
temp.pre=temp.next.pre;//如果删除的是最后的元素则会出现风险
break; }
temp=temp.next;
}
} //遍历
public void queryLinkList() { if (head1.next== null) {
System.out.println("链表为空");
return;
} Student1 temp = head1;
while (true) {
if (temp.next == null) {
return;
}
System.out.println(temp.next);
temp = temp.next;
}
} } //定义一个学生信息的节点类
class Student1 {
int id;//学号
String name;//姓名
String sex;//性别
Student1 next;//指向下一个学生的节点
Student1 pre;//指向前一个节点 public Student1(int id, String name, String sex) {
this.id = id;
this.name = name;
this.sex = sex;
} @Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
'}';
}
}

java实现双向链表的增删改查的更多相关文章

  1. Java连接MySQL数据库增删改查通用方法

    版权声明:本文为博主原创文章,未经博主允许不得转载. Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类 ...

  2. Java实现mongodb原生增删改查语句

    Java实现mongodb原生增删改查语句 2018-03-16 自动化测试时,需校验数据库数据,为了快速自动化,在代码中用原生增删改查语句操作mongodb 结构 代码 0 pom.xml < ...

  3. Java连接MongoDB进行增删改查

    1.导入必须的包: 详情看项目:http://pan.baidu.com/s/1cvDAOY 2.通过Myeclipse创建WEB项目 3. 3.bean:创建实体类 package com.bean ...

  4. java实现xml文件增删改查

    java一次删除xml多个节点: 方案1.你直接改动了nodeList,这一般在做循环时是不同意直接这么做的. 你能够尝试在遍历一个list时,在循环体同一时候删除list里的内容,你会得到一个异常. ...

  5. java对mysql的增删改查

    -----连接数据库 package connectdb;import java.sql.*;class Dbcon { // 此处连接数据库,独立开一个类,以后操作数据库的每次连接就不用写这么多 p ...

  6. java连接mysql以及增删改查操作

    java连接数据库的代码基本是固定的,步骤过程觉得繁琐些,代码记起来对我来说是闹挺.直接上代码: (温馨提醒:你的项目提前导入连接数据库的jar包才有的以下操作 ) class DBConnectio ...

  7. Java连接数据库,及增删改查

    自定义连接数据库的util类 package com.shuzf.jdbc; import java.sql.Connection; import java.sql.DriverManager; im ...

  8. java操作数据库:增删改查

    不多bb了直接上. 工具:myeclipse 2016,mysql 5.7 目的:java操作数据库增删改查商品信息 test数据库的goods表 gid主键,自增 1.实体类Goods:封装数据库数 ...

  9. Java操作数据库实现"增删改查"

    本文主要讲解JDBC操作数据库    主要实现对MySql数据库的"增删改查" 综合概述: JDBC的常用类和接口 一   DriverManager类 DriverManage类 ...

随机推荐

  1. 笃情开源:我和 Apache DolphinScheduler 社区的故事

    背景 本文的主人翁是 2 次飞机参会现场交流,四天研究就把 DolphinScheduler 用上生产的来自车联网行业的大数据 boy - 黄立同学.怎么样,听起来是不是有点 crazy?下面就来看看 ...

  2. 总结-一本通提高篇&算竞进阶记录

    当一个人看见星空,就再无法忍受黑暗 为了点亮渐渐沉寂的星空 不想就这样退役 一定不会鸽の坑 . 一本通提高篇 . 算竞进阶 . CDQ & 整体二分 . 平衡树 . LCT . 字符串 . 随 ...

  3. CF580D Kefa and Dishes (状压DP)

    枚举最后食物 #include <iostream> #include <cstdio> #include <cstring> #include <algor ...

  4. 052_末晨曦Vue技术_处理边界情况之程序化的事件侦听器

    程序化的事件侦听器 点击打开视频讲解更详细 现在,你已经知道了 $emit 的用法,它可以被 v-on 侦听,但是 Vue 实例同时在其事件接口中提供了其它的方法.我们可以: 通过 $on(event ...

  5. pnpm凭什么这么快

    前端包管理器层出不穷,pnpm算是一个后起之秀.它和npm有什么不同,为什么有了npm还要造一个pnpm? npm的问题 npm是最早的包管理器,安装nodejs自带npm,v3版本之前,npm安全依 ...

  6. 微软Azure配置中心 App Configuration (三):配置的动态更新

    写在前面 我在前文: <微软Azure配置中心 App Configuration (一):轻松集成到Asp.Net Core>已经介绍了Asp.net Core怎么轻易的接入azure ...

  7. 教程 - 深度探讨在 Vue3 中引入 CesiumJS 的最佳方式

    目录 1. 你应该先知道的基础知识 1.1. CesiumJS 的库构成 1.2. 选择 Vite3 和 pnpm 的理由 1.3. 使用 External 模式引入静态库 - 不打包静态库 1.4. ...

  8. ABAQUS和UG许可证冲突问题的解决方案

    前段时间重新安装了ABAQUS,更新到了2020版本后,发现NX UG怎么突然打不开了,搜索一下,发现是两个许可证有冲突.找了很多解决方案,主要归纳为以下两种: 方法一:Lmtools修改法 先说结论 ...

  9. Dubbo源码(九) - 服务调用过程

    1. 前言 本文基于Dubbo2.6.x版本,中文注释版源码已上传github:xiaoguyu/dubbo 源码分析均基于官方Demo,路径:dubbo/dubbo-demo 如果没有看过之前Dub ...

  10. python字典键或值去重

    from fuzzywuzzy import fuzz, process a = {'嫦娥四号探测器是用哪个型号的火箭发射的?': ['长征3B'], '嫦娥四号探测器是在我国[]发射成功的.': [ ...