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类 ...
随机推荐
- Thinhole类声明和实现
Thinhole类说白了就是在眼睛处,放一个放大镜.就像我们平时用放大镜观察物体一样.这样实现的效果的是,周围会模糊.原理书上都说的很清楚了,我把算法截图下来了.这个应用我猜测是在竞技游戏比如csgo ...
- 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(12)-Fiddler设置IOS手机抓包,你知多少???
1.简介 Fiddler不但能截获各种浏览器发出的 HTTP 请求,也可以截获各种智能手机发出的HTTP/ HTTPS 请求. Fiddler 能捕获Android 和 Windows Phone 等 ...
- LuoguAT2827 LIS (LIS)
裸题 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm ...
- python包合集-shutil
一.简介 shutil是 python 中的高级文件操作模块,与os模块形成互补的关系,os主要提供了文件或文件夹的新建.删除.查看等方法,还提供了对文件以及目录的路径操作.shutil模块提供了移动 ...
- Linux 禁止root远程登录解决办法
linux中root用户是超级管理员,可以针对root用户暴力破解密码,这样很不安全,工作中我们一般禁止root用户直接远程登陆,开设一个或多个普通用户,只允许登陆普通用户,如果有需要用root用户, ...
- VS2019 Community社区版登录提示:我们无法刷新此账户的凭证 解决方法
最正确的方式: 1.点击 帮助-->发送反馈-->报告问题 2.点击 检查新的许可证 ,即可登陆成功 3.如果提示:无法下载或者下载失败. 4.那么就需要在左边 账户选项 中将 嵌入式We ...
- KingbaseES例程之拥有大量索引的表导入数据
概述 如何快速插入大量数据比如几千万上亿的带索引的数据表. 数据准备 准备一个拥有二十个索引的数据表. kingbase=# \d+ bigtab Table "kingbase.bigta ...
- 【读书笔记】C#高级编程 第十章 集合
(一)概述 数组的大小是固定的.如果元素个数是动态的,就应使用集合类. List<T>是与数组相当的集合类.还有其它类型的集合:队列.栈.链表.字典和集. (二)列表 1.创建列表 调用默 ...
- 目标检测-SSD算法从零实现
1. 几个工具函数 def box_corner_to_center(boxes): """从(左上,右下)转换到(中间,宽度,高度)""" ...
- 利用高级组策略管理AGPM复制组策略GPO
有时候管理多个林,在一个林中配置了GPO之后,想复制出来用到其它林里.默认系统的组策略管理里没有这个功能.但是微软在微软企业桌面优化套件Microsoft Desktop Optimization P ...