java实现双向链表的增删改查
双向链表的增删改查
和单链表的操作很像: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实现双向链表的增删改查的更多相关文章
- Java连接MySQL数据库增删改查通用方法
版权声明:本文为博主原创文章,未经博主允许不得转载. Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类 ...
- Java实现mongodb原生增删改查语句
Java实现mongodb原生增删改查语句 2018-03-16 自动化测试时,需校验数据库数据,为了快速自动化,在代码中用原生增删改查语句操作mongodb 结构 代码 0 pom.xml < ...
- Java连接MongoDB进行增删改查
1.导入必须的包: 详情看项目:http://pan.baidu.com/s/1cvDAOY 2.通过Myeclipse创建WEB项目 3. 3.bean:创建实体类 package com.bean ...
- java实现xml文件增删改查
java一次删除xml多个节点: 方案1.你直接改动了nodeList,这一般在做循环时是不同意直接这么做的. 你能够尝试在遍历一个list时,在循环体同一时候删除list里的内容,你会得到一个异常. ...
- java对mysql的增删改查
-----连接数据库 package connectdb;import java.sql.*;class Dbcon { // 此处连接数据库,独立开一个类,以后操作数据库的每次连接就不用写这么多 p ...
- java连接mysql以及增删改查操作
java连接数据库的代码基本是固定的,步骤过程觉得繁琐些,代码记起来对我来说是闹挺.直接上代码: (温馨提醒:你的项目提前导入连接数据库的jar包才有的以下操作 ) class DBConnectio ...
- Java连接数据库,及增删改查
自定义连接数据库的util类 package com.shuzf.jdbc; import java.sql.Connection; import java.sql.DriverManager; im ...
- java操作数据库:增删改查
不多bb了直接上. 工具:myeclipse 2016,mysql 5.7 目的:java操作数据库增删改查商品信息 test数据库的goods表 gid主键,自增 1.实体类Goods:封装数据库数 ...
- Java操作数据库实现"增删改查"
本文主要讲解JDBC操作数据库 主要实现对MySql数据库的"增删改查" 综合概述: JDBC的常用类和接口 一 DriverManager类 DriverManage类 ...
随机推荐
- 笃情开源:我和 Apache DolphinScheduler 社区的故事
背景 本文的主人翁是 2 次飞机参会现场交流,四天研究就把 DolphinScheduler 用上生产的来自车联网行业的大数据 boy - 黄立同学.怎么样,听起来是不是有点 crazy?下面就来看看 ...
- 总结-一本通提高篇&算竞进阶记录
当一个人看见星空,就再无法忍受黑暗 为了点亮渐渐沉寂的星空 不想就这样退役 一定不会鸽の坑 . 一本通提高篇 . 算竞进阶 . CDQ & 整体二分 . 平衡树 . LCT . 字符串 . 随 ...
- CF580D Kefa and Dishes (状压DP)
枚举最后食物 #include <iostream> #include <cstdio> #include <cstring> #include <algor ...
- 052_末晨曦Vue技术_处理边界情况之程序化的事件侦听器
程序化的事件侦听器 点击打开视频讲解更详细 现在,你已经知道了 $emit 的用法,它可以被 v-on 侦听,但是 Vue 实例同时在其事件接口中提供了其它的方法.我们可以: 通过 $on(event ...
- pnpm凭什么这么快
前端包管理器层出不穷,pnpm算是一个后起之秀.它和npm有什么不同,为什么有了npm还要造一个pnpm? npm的问题 npm是最早的包管理器,安装nodejs自带npm,v3版本之前,npm安全依 ...
- 微软Azure配置中心 App Configuration (三):配置的动态更新
写在前面 我在前文: <微软Azure配置中心 App Configuration (一):轻松集成到Asp.Net Core>已经介绍了Asp.net Core怎么轻易的接入azure ...
- 教程 - 深度探讨在 Vue3 中引入 CesiumJS 的最佳方式
目录 1. 你应该先知道的基础知识 1.1. CesiumJS 的库构成 1.2. 选择 Vite3 和 pnpm 的理由 1.3. 使用 External 模式引入静态库 - 不打包静态库 1.4. ...
- ABAQUS和UG许可证冲突问题的解决方案
前段时间重新安装了ABAQUS,更新到了2020版本后,发现NX UG怎么突然打不开了,搜索一下,发现是两个许可证有冲突.找了很多解决方案,主要归纳为以下两种: 方法一:Lmtools修改法 先说结论 ...
- Dubbo源码(九) - 服务调用过程
1. 前言 本文基于Dubbo2.6.x版本,中文注释版源码已上传github:xiaoguyu/dubbo 源码分析均基于官方Demo,路径:dubbo/dubbo-demo 如果没有看过之前Dub ...
- python字典键或值去重
from fuzzywuzzy import fuzz, process a = {'嫦娥四号探测器是用哪个型号的火箭发射的?': ['长征3B'], '嫦娥四号探测器是在我国[]发射成功的.': [ ...