双向链表的增删改查

和单链表的操作很像: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. ZJOI2022选做

    \(ZJOI2022\) 众数 发现并不存在\(poly(log(n))\)的做法,那么尝试\(n\sqrt n\) 套路的按照出现次数分组,分为大于\(\sqrt n\)和小于\(\sqrt n\) ...

  2. show create table底层流程跟踪

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 导语 SHOW CREATE TABLE语句用于为指定表/视图显示创建的语句,本文将简要描述如何在MySQL源码里跟踪和学 ...

  3. meterpreter后期攻击使用方法

    Meterpreter是Metasploit框架中的一个扩展模块,作为溢出成功以后的攻击载荷使用,攻击载荷在溢出攻击成功以后给我们返回一个控制通道.使用它作为攻击载荷能够获得目标系统的一个Meterp ...

  4. 慢SQL,压垮团队的最后一根稻草!

    一.什么是慢 SQL 什么是慢SQL?顾名思义,运行时间较长的 SQL 语句即为慢 SQL! 那问题来了,多久才算慢呢? 这个慢其实是一个相对值,不同的业务场景下,标准要求是不一样的. 我们都知道,我 ...

  5. 大数据Hadoop入门教程 | (一)概论

    数据是什么 数据是指对客观事件进行记录并可以鉴别的符号,是对客观事物的性质.状态以及相互关系等进行记载的物理符号或这些物理符号的组合,它是可识别的.抽象的符号. 它不仅指狭义上的数字,还可以是具有一定 ...

  6. Java 断点下载(下载续传)服务端及客户端(Android)代码

    原文: Java 断点下载(下载续传)服务端及客户端(Android)代码 - Stars-One的杂货小窝 最近在研究断点下载(下载续传)的功能,此功能需要服务端和客户端进行对接编写,本篇也是记录一 ...

  7. docker hung住问题排查

    背景:这个是之前遇到的老问题. # systemctl status lxcfs● lxcfs.service - FUSE filesystem for LXC Loaded: loaded (/u ...

  8. [多校 NOIP 联合模拟 20201130 T4] ZZH 的旅行(斜率优化dp,启发式合并,平衡树)

    题面 题目背景 因为出题人天天被 ZZH(Zou ZHen) 吊打,所以这场比赛的题目中出现了 ZZH . 简要题面 数据范围 题解 (笔者写两个log的平衡树和启发式合并卡过的,不足为奇) 首先,很 ...

  9. 「题解报告」CF1067A Array Without Local Maximums

    大佬们的题解都太深奥了,直接把转移方程放出来让其他大佬们感性理解,蒟蒻们很难理解,所以我就写了一篇让像我一样的蒟蒻能看懂的题解 原题传送门 动态规划三部曲:确定状态,转移方程,初始状态和答案. --神 ...

  10. Kotlin快速上手

    一.Kotlin基础 1.数据类型声明 在Kotlin中要定义一个变量需要使用var关键字 //定义了一个可以修改的Int类型变量 var number = 39 如果要定义一个常量可以使用val关键 ...