4,java数据结构和算法:双向链表 ,有序添加,正向遍历,反向遍历, 增删改查
直接上代码
//节点
class HeroNodeD{
int no;
String name;
String nickName;
HeroNodeD pre;//前一节点
HeroNodeD next;//后一节点
public HeroNodeD(int no, String name, String nickName) {
this.no = no;
this.name = name;
this.nickName = nickName;
}
@Override
public String toString() {
return "HeroNodeD{" +
"no=" + no +
", name='" + name + '\'' +
", nickName='" + nickName + '\'' +
'}';
}
}
双向链表:
//双向链表
class DoublleLinkList{
public HeroNodeD head = new HeroNodeD(0,"","");
public void setHead(HeroNodeD head) {
this.head = head;
}
//0, 获取头结点
public HeroNodeD getHead(){
return head;
}
//1, 获取尾结点
public HeroNodeD getLastNode(){
HeroNodeD temp = head;
while(true){
if(temp.next == null){
break;//尾节点
}
temp = temp.next;
}
return temp;
}
//2, 添加(添加节点到链表的最后面)
public void add(HeroNodeD node){
HeroNodeD temp = head;
while(true){
if(temp.next == null){
break;//尾节点
}
temp = temp.next;
}
//循环结束后,此时temp就是尾节点
temp.next = node;
node.pre = temp;
}
//3, 添加(根据节点的no(排名)的大小, 有序添加)
public void addByNo(HeroNodeD node){
HeroNodeD temp = head;
while (true) {
if(temp.next == null){
break;//链表尾部就跳出
}
if(temp.next.no > node.no){
break;
}
temp = temp.next;
}
//循环结束, 说明temp的下一节点, 就是node的插入位置
node.next = temp.next;//设置node和 temp.next的后节点
temp.next.pre = node;//设置node和 temp.next的 前节点
node.pre = temp;//设置temp 和 node的 前节点
temp.next = node;//设置temp 和 node的 后节点
}
//4, 双向链表的 遍历,从前向后遍历
public void showBeginToEnd(){
HeroNodeD temp = head;
while(true){
if(temp.next == null){
break;
}
System.out.println(temp);
temp = temp.next;
}
System.out.println(temp);
}
//5:从后向前遍历
public void showEndToBegin(){
//获取尾节点
HeroNodeD temp = getLastNode();
while(true){
if(temp.pre == null){
break;
}
System.out.println(temp);
temp = temp.pre;
}
System.out.println(temp);
}
//6, 链表的长度// 头节点不计入长度
public int length(){
HeroNodeD temp = head;
int count=0;
while(true){
if(temp.next == null){
break;
}
count++;
temp = temp.next;
}
return count;
}
//7, 删除第n个节点
public void delNode(int n){
int count = 0;
boolean flag = false;
HeroNodeD temp = head.next;
while (temp != null) {
count++;
if (count == n) {
flag = true;
break;
}
temp = temp.next;
}
if(flag){
//跳出循环,说明找到这个节点, 删除该节点
temp.pre.next = temp.next;
temp.next.pre = temp.pre;
}else{
System.out.println("不存在这个节点");
}
}
//8, 更改某个节点
public void updateNode(int n, HeroNodeD node){
boolean flag = false;
int count = 0;
HeroNodeD temp = head.next;
while (temp != null) {
if(temp.next == null){
break;
}
count++;
if(count == n){
flag = true;
break;
}
temp = temp.next;
}
if(flag){
//更换这个节点
temp.pre.next = node;
node.pre = temp.pre;
node.next = temp.next;
temp.next.pre = node;
}else{
System.out.println("不存在这个节点");
}
}
}
测试代码:
public static void main(String[] args){
DoublleLinkList doublelink = new DoublleLinkList();
HeroNodeD node1 = new HeroNodeD(1, "宋江", "及时雨");
HeroNodeD node2 = new HeroNodeD(2, "吴用", "神算子");
HeroNodeD node3 = new HeroNodeD(3, "卢俊义", "玉麒麟");
HeroNodeD node4 = new HeroNodeD(4, "武松", "打老虎");
HeroNodeD node5 = new HeroNodeD(5, "吕财", "打老虎");
doublelink.add(node1);
doublelink.add(node3);
doublelink.addByNo(node2);//有序添加
doublelink.showBeginToEnd();//1-2-3
System.out.println("==========================");
doublelink.showEndToBegin();//3-2-1
System.out.println(doublelink.length());//长度为3
doublelink.delNode(4);//没有这个节点
doublelink.showBeginToEnd();
System.out.println("==========");
doublelink.updateNode(2,node5);//更换第二个节点
doublelink.showBeginToEnd();
}
测试结果:

4,java数据结构和算法:双向链表 ,有序添加,正向遍历,反向遍历, 增删改查的更多相关文章
- Android(java)学习笔记193:利用谷歌API对数据库增删改查(推荐使用)
接下来我们通过项目案例来介绍:这个利用谷歌API对数据库增删改查 1.首先项目图: 2.这里的布局文件activity_main.xml: <LinearLayout xmlns:android ...
- java桥连接sql server之登录验证及对数据库增删改查
一:步骤 1.sql server建立数据库和相关表 2.建立数据源 (1).打开控制面板找到管理,打开ODBC选项或直接搜索数据源 (2).打开数据源配置后点击添加,选择sql server点击 ...
- eclipse添加插件实现php的增删改查
一:eclipse添加php插件 1.运行eclipse,在主界面里找到Help下的“Instal New Software”.然后在Work with中选择“All Available Sites” ...
- Android(java)学习笔记136:利用谷歌API对数据库增删改查(推荐使用)
接下来我们通过项目案例来介绍:这个利用谷歌API对数据库增删改查 1. 首先项目图: 2. 这里的布局文件activity_main.xml: <LinearLayout xmlns:andro ...
- Java学习笔记——JDBC之与数据库MySQL的连接以及增删改查等操作
必须的准备工作 一.MySQL的安装.可以参考博文: http://blog.csdn.net/jueblog/article/details/9499245 二.下载 jdbc 驱动.可以从在官网上 ...
- java程序设计课期中考试——数据库的增删改查和简单的js界面
首先是设计思路,对于数据库的增删改查,我们借助Ecilipse来进行前端和后端的编写.Ecilipse是可以进行java web项目的操作的. 前端,我们选择用使用jsp,所谓的jsp就是可以嵌入其他 ...
- MongoDB(六)java操作mongodb增删改查
java操作mysql数据库的代码我们已经了如指掌了.增删改查,java对mongodb数据库也是类似的操作,先是数据库连接.再是进行操作. 首先我们进入进入admin数据库.然后建立自己的数据库te ...
- Java数据结构和算法(四)--链表
日常开发中,数组和集合使用的很多,而数组的无序插入和删除效率都是偏低的,这点在学习ArrayList源码的时候就知道了,因为需要把要 插入索引后面的所以元素全部后移一位. 而本文会详细讲解链表,可以解 ...
- 【Java数据结构学习笔记之二】Java数据结构与算法之栈(Stack)实现
本篇是java数据结构与算法的第2篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型 栈是 ...
- java数据结构与算法之栈(Stack)设计与实现
本篇是java数据结构与算法的第4篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型 栈是一种用于 ...
随机推荐
- hdu4973 线段树(题目不错,用了点,段,更新查找还有DFS)
题意: 给你一个初始序列,初始序列长度n,分别为1 2 3 4 5 ....n,有两种操作 (1)D l r 把l_r之间的数据都复制一遍 1 2 3 4 5 6 D 2 4 = 1 2 ...
- (翻译)Attacking Interoperability(攻击互操作性)in Black Hat 2009 研究报告
前言 攻击互操作性(Attacking Interoperability)是 Mark & Ryan & David 发表于 2009 年的美国黑帽大会(Black Hat)上的一份研 ...
- Xshell6连Linux
一.安装 文件 链接: 提取码:8rmr 二.连Linux 名称填自己喜欢的.续之前,我们保持一样的名字.主机填IP,根据之前Linux填的静态IP去连接. 然后双击,连接 我们用最高权限,填root ...
- 批处理用WINRAR只压缩某类型的文件
1:新建文件夹sql back 和 back,在sql back 文件夹内新建test1.dbb和test2.bak文件 2:新建批处理文件rar.bat,编辑文件: @echo off for %% ...
- StreamReader & StreamWriter
这节讲StreamReader & StreamWriter,这两个类用于操作字符或者字符串,它将流的操作封装在了底层,相对来说用法比较简单,但是它不支持Seek()方法. 先看一下代码: F ...
- VBO、VAO和EBO
Vertex Buffer Object 对于经历过fixed pipeline的我来讲,VBO的出现对于渲染性能提升让人记忆深刻.完了,暴露年龄了~ //immediate mode glBegin ...
- 引言:CTF新世界
1. CTF的昨天和今天 CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式.CTF起源于1996年DEFCON全球黑客 ...
- Codeforces Round #713 (Div. 3)AB题
Codeforces Round #713 (Div. 3) Editorial 记录一下自己写的前二题本人比较菜 A. Spy Detected! You are given an array a ...
- 【近取 Key】Alpha - v1.0 版本发布说明
功能与特性 Alpha 版本虽然为本软件的第一代版本,但已基本覆盖了用户个人使用时的主要功能.除登陆注册与后台管理外,下文将分版块详细介绍面向用户的主要功能特性. 『产品主页』 潜在应用场景 场景 0 ...
- Spring Cloud Gateway之全局过滤器在工作中的使用场景
一.使用注意事项 1.全局过滤器作用于所有的路由,不需要单独配置. 2.通过@Order来指定执行的顺序,数字越小,优先级越高. 二.默认全局拦截器的整体架构 三.实战场景,例如,校验token.记录 ...