10,java双向链表基础代码复现
双向链表总体来说和单链表差别不大,最大的区别就是node结构中多了一个pre指针(变量)指向前一个节点,因为有了之前的单链表基础,双向链表的复现问题少了很多,基本可以不参考老师的代码自主写下来。
1、添加函数(加入到链表最后)
因为此处的添加只需加到最后即可,按照单链表的添加,遍历到最后并更改辅助节点的next指向node和node的pre指向temp即可。
public void add(teamNode1 node){
teamNode1 temp=head;
while(true){
if(temp.next==null) break;
temp=temp.next;
}
temp.next=node;
node.pre=temp;
}
2、显示函数(打印出链表内的所有节点)
今天测试的时候发现昨天好像写错了- -,今天发现最后一个节点的信息无法被打印。后来发现,判断next为null的语句不同于其他函数,此处应该放在输出语句之后,后移语句之前。
public void list(){
if(head.next==null){
System.out.println("链表为空");
return;
}
teamNode1 temp=head.next;
while (true){
System.out.println(temp);
if(temp.next==null) break;
temp=temp.next;
}
}
3、更新函数 与单链表的修改函数完全一致
public void update(teamNode1 node){
teamNode1 temp=head;
boolean flag=false;
while (true){
if(temp.next==null) break;
if(temp.no==node.no){
flag=true;
break;
}
temp=temp.next;
}
if(flag){
temp.name=node.name;
temp.point=node.point;
}else {
System.out.println("未找到要修改的队伍");
}
}
4、删除函数
此处与单链表有较大不同,双向链表可实现自我删除,遍历到要删除的节点即可,而非要删的节点的前一个节点。但有个要注意的就是当要删除的函数为链表最后一个函数时,temp的next节点l为空,没有pre指针,也无法将pre指向node,所以在修改前要先判断。
public void delete(int n){
if(head.next==null) {
System.out.println("链表为空无法删除");
return ;
}
boolean flag=false;
teamNode1 temp=head;
while(true){
if(temp.next==null) break;
if(temp.no==n){
flag=true;
break;
}
temp=temp.next;
}
if(flag&&temp.next!=null){
temp.pre.next=temp.next;
temp.next.pre=temp.pre;
}else if(flag){
temp.pre.next=temp.next;
}else {
System.out.println("未找到该位置队伍,无法删除");
}
}
5、按顺序加入函数 双向链表addbyorder
思路和单链表的按顺序插入相似,此处的加入到中间,需要先用temp.next.no> node.no找到应该插入的位置与插入位置前一个节点的temp,然后从后往前更改,先更改temp的next节点即要插入位置的后一个节点名为last,将它的pre指向node。然后更改node的next指向last,更改node的pre指向temp,最后更改temp的next指向node。这是比较顺的思路,不会导致有用的信息被覆盖掉。
另外的,与删除链表相对应,此处要多考虑一种加入时要加入到链表尾部时的情况,相对于上面的情况,就不存在last这个节点了,因此不用修改node的next和last的pre。
因为情况比较多,我放弃了布尔值的标识符,用int的标识符,赋予123值来区分情况,1为需要插入,即前后都有节点,2为链表中已有该编号队伍,0为遍历到最后发现没有编号大于他的节点,也没有等于它的节点,所以就是要加在结尾。
public void addbyorder(teamNode1 node){
teamNode1 temp=head;
int flag=0;
while (true){
if (temp.next==null) break;
if(temp.next.no== node.no){
flag=2;
break;
}
if (temp.next.no> node.no){
flag=1;
break;
}
temp=temp.next;
}
if(flag==1){
temp.next.pre=node;
node.next=temp.next;
node.pre=temp;
temp.next=node;
}else if(flag==0){
temp.next=node;
node.pre=temp;
}else {
System.out.println("已有该队伍");
}
}
10,java双向链表基础代码复现的更多相关文章
- Java常用基础代码
1.加载properties文件 Properties properties = new Properties(); properties.load(Properties.class.getReso ...
- 【Java基础】2、Java中普通代码块,构造代码块,静态代码块区别及代码示例
Java中普通代码块,构造代码块,静态代码块区别及代码示例.Java中普通代码块,构造代码块,静态代码块区别及代码示例 执行顺序:静态代码块>静态方法(main方法)>构造代码块>构 ...
- 【代码笔记】Java常识性基础补充(一)——赋值运算符、逻辑运算符、三元运算符、Scanner类、键盘输入、Random类、随机数
为什么要进行Java常识性基础补充? 之前学习Java语言,学得很多很杂,而且是很多不同的方面插入讲解的,比如在跟班上课,自学java编程例子,java语法,过了很久,因为各种原因长时间不怎么写,有时 ...
- java:Spring框架1(基本配置,简单基础代码模拟实现,spring注入(DI))
1.基本配置: 步骤一:新建项目并添加spring依赖的jar文件和commons-logging.xx.jar: 步骤二:编写实体类,DAO及其实现类,Service及其实现类; 步骤三:在src下 ...
- java:struts2.3框架1(struts2快速配置,各文件之间的关系,基础代码简化版,XML中的通配符)
1.struts2快速配置: A.到http://struts.apache.org下载struts2开发包struts-2.3.32-all.zip B.新建web项目并添加struts2依赖的ja ...
- [Java基础]代码块及java反编译
块的作用域: 块(即复合语句)是指一对花括号括起来的若干条简单的java语句.块确定了变量的作用域.一个块可以嵌套在另一个块中.但是,在嵌套的两个块中声明同名的变量时应注意,块中变量申明在块外变量 ...
- JAVA面试基础
JAVA相关基础知识1.面向对象的特征有哪些方面 ?1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂 ...
- 你所不知道的库存超限做法 服务器一般达到多少qps比较好[转] JAVA格物致知基础篇:你所不知道的返回码 深入了解EntityFramework Core 2.1延迟加载(Lazy Loading) EntityFramework 6.x和EntityFramework Core关系映射中导航属性必须是public? 藏在正则表达式里的陷阱 两道面试题,带你解析Java类加载机制
你所不知道的库存超限做法 在互联网企业中,限购的做法,多种多样,有的别出心裁,有的因循守旧,但是种种做法皆想达到的目的,无外乎几种,商品卖的完,系统抗的住,库存不超限.虽然短短数语,却有着说不完,道不 ...
- JAVA相关基础知识
JAVA相关基础知识 1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分, ...
- java必备基础知识点
Java基础 1. 简述Java的基本历史 java起源于SUN公司的一个GREEN的项目,其原先目的是:为家用消费电子产品发送一个信息的分布式代码系统,通过发送信息控制电视机.冰箱等 2. 简单写出 ...
随机推荐
- Lodop打印小票
使用Lodop打印小票 1.html页面 <head> <meta http-equiv="Content-Type" content="text/ht ...
- 后台管理系统带关闭的选项卡(多标签页)功能 适配bootstrap3和4 Bootstrap Hover Dropdown
眼看着是不是很熟悉,其实基本大部门后台管理系统都有这个功能,使用iframe实现展示标签页面. 主要功能:标签页点击,添加标签页,向左滚动标签页,向右滚动标签页,刷新当前标签页,关闭当前标签页,关闭其 ...
- VS 管理控制台提示ScriptHalted
一.结论 出现该问题是因为PowerShell 版本低的原因,按以下步骤操作即可 二.解决方案 1.下载最新PowerShell 安装程序包,根据系统找对应版本x86还是x64 https://www ...
- 学习Java Day8
今天学习了for循环,与C语言几乎无差异: 也学习了while和do while循环 今天学习了for循环,与C语言几乎无差异: 也学习了while和do while循环
- iview表单验证
iview表单验证的步骤 第一步:给 Form 设置属性 rules :rules="规则设置" 第二步:同时给需要验证的每个 FormItem 设置属性 prop 指向对应字段即 ...
- 一个基于 gin+ grpc + etcd 等框架开发的小栗子
一.标准的项目结构 首先我们看一个标准的项目结构是什么样子的,github 上给出的一个示例:golang-standards/project-layout 二.服务注册与发现流程 三.示例代码 项目 ...
- vue api封装 request.js
import axios from 'axios' import { Message, MessageBox } from 'element-ui' import store from '../sto ...
- pat 乙级 1025 反转链表
目前无法ac过最后一个测试点,其余ac,原因是有无效节点存在,但这个代码加上去除无效节点函数时便会运行超时 还没想出来怎么做,先这样吧 #include <stdio.h> #includ ...
- 41.Sentinel
Feign 整合 Sentinel 依赖 <!--Feign--> <dependency> <groupId>org.springframework.cloud& ...
- Vue框架中有关 computed的相关知识
1,传统使用computed属性的方式如下: 注意:此时如果我们点击修改的时候会有如下警告(表示computed属性不可以修改,如果非得修改,我们应该如下下图所示操作) 2,修改computed属性的 ...