双向链表的(CRUD)

代码实现(CRUD)

package com.atguigu.linkedlist;/*** @创建人 wdl* @创建时间 2021/3/19* @描述*/
public class DoubleLinkedListDemo {public static void main(String[] args) {//测试System.out.println("双向链表的测试");HeroNode2 hearo1 = new HeroNode2(1, "宋江", "及时雨");HeroNode2 hearo2 = new HeroNode2(2, "卢俊义", "玉麒麟");HeroNode2 hearo3 = new HeroNode2(3, "吴用", "智多星");HeroNode2 hearo4 = new HeroNode2(4, "林冲", "及时钉钉雨");//创建一个双向链表DoubleLinkedList doubleLinkedList = new DoubleLinkedList();doubleLinkedList.add(hearo1);doubleLinkedList.add(hearo2);doubleLinkedList.add(hearo3);doubleLinkedList.add(hearo4);doubleLinkedList.list();//修改HeroNode2 newHeroNode = new HeroNode2(4, "公孙胜", "入云龙");doubleLinkedList.update(newHeroNode);System.out.println("修改后的链表");doubleLinkedList.list();//删除doubleLinkedList.del(3);System.out.println("删除后的链表");doubleLinkedList.list();}
}
//创建一个双向链表的类
class DoubleLinkedList{//先初始化一个头结点,头节点不要动,不存放具体的数据private HeroNode2 head=new HeroNode2(0,"","");//返回头节点public HeroNode2 getHead(){return head;}//显示链表[遍历]public void list() {//判断链表是否为空if (head.next == null) {System.out.println("链表为空");return;}//因为头节点不能动,因此我们需要一个辅助变量来遍历HeroNode2 temp = head.next;while (true) {//判断是否到链表最后if (temp == null) {break;}//输出节点的信息System.out.println(temp.toString());//将temp后移,一定要小心temp = temp.next;}}//添加一个节点到双向链表最后public void add(HeroNode2 heroNode){//因为head节点不能动,因此我们需要一个辅助遍历tempHeroNode2 temp=head;//遍历链表,找到最后while(true){//找到链表的最后if(temp.next==null){break;}//如果没有找到最后,将temp后移temp=temp.next;}//当退出while循环时,temp就指向了链表的最后//形成双向链表temp.next=heroNode;heroNode.pre=temp;}//修改一个节点的内容,和单向链表一样,// 只是节点的类型改为HeroNode2public void update(HeroNode2 newHeroNode) {//判断是否为空if (head.next == null) {System.out.println("链表为空");return;}//找到需要修改的节点,根据no编号//定义一个辅助变量HeroNode2 temp = head.next;boolean flag = false;//表示是否找到该节点while (true) {if (temp == null) {break;//已经遍历完链表}if (temp.no == newHeroNode.no) {//找到flag = true;break;}temp = temp.next;}//根据flag判断是否找到要修改的节点if (flag) {temp.name = newHeroNode.name;temp.nickname = newHeroNode.nickname;} else {//没有找到System.out.println("没有找到编号" + temp.no + "的节点,不能修改");}}//从双向链表中删除一个节点//说明//1.对于双向链表,我们可以直接找到删除的这个节点//2.找到后,自我删除即可public void del(int no) {//判断当前链表是否为空if (head.next==null){//空链表System.out.println("链表为空,无法删除");return;}HeroNode2 temp = head.next;//辅助变量(指针)boolean flag = false;//标志是否找到待删除节点while (true) {if (temp == null) {//已经到链表的最后break;}if (temp.no == no) {//找到的待删除节点的前一个节点tempflag = true;break;}temp = temp.next;//temp后移,遍历}//判断flagif (flag) {//找到//可以删除temp.pre.next=temp.next;//这里我们的代码有问题?//如果是最后一个节点,就不要执行下面这句话,否则出现空指针if(temp.next!=null){temp.next.pre=temp.pre;}} else {System.out.println("要删除的" + no + "节点不存在");}}}//定义HeroNode,每个HeroNode对象就是一个节点
class HeroNode2{public int no;public String name;public String nickname;public HeroNode2 next;//指向下一个节点,默认为nullpublic HeroNode2 pre;//指向前一个节点,默认为null//构造器public HeroNode2(int no,String name,String nickname){this.no=no;this.name=name;this.nickname=nickname;}//为了显示方法,我们重写toString@Overridepublic String toString() {return "HeroNode{" +"no=" + no +", name='" + name + '\'' +", nickname='" + nickname + '\'' +
//                ", next=" + next +'}';}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/326975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java读取Resources下文件

java读取Resources下文件_杰子的世界-CSDN博客_java获取resources下的文件 第四种, 读取路径 ResourceBundle bundle ResourceBundle.getBundle("config"); String url bundle.getString("url"); 1 2 该方法默认读取的是resources文件夹下的以…

达到年薪 40W 必需掌握的技术。

转载自 达到年薪 40W 必需掌握的技术。 很多人在问我,程序员如何拿高薪,如何做到年薪40W,其实总结出来还是一句话,你的技术决定你的能力已经薪资。 那么什么样的技术人才才能拿到一份Java行业里面的高薪呢?下面是我…

mybatis简单案例源码详细【注释全面】——Utils层(MybatisUtils.java)

/** * Title: MybatisUtils.java * Package org.util * Description: TODO该方法的主要作用: * author A18ccms A18ccms_gmail_com * date 2017-10-5 下午8:38:14 * version V1.0 */ package org.util;import java.io.IOException; import java.io.InputStrea…

虚拟研讨会:.NET的未来在哪里?

.NET生态系统在过去的一年中发生了很多事情。在几个方面发展非常迅速:Xamari、UWP、.NET Core、.NET native、F#和开源等等。 如果要关注细节,那大的景象难以描绘。因为在每个方面都有新的动作:跨平台、云、移动、Web应用和通用应用。开发人员…

iOS Charles 抓包

iOS Charles 抓包指南 - 从入门到精通_VictorZhang-CSDN博客_charles ios 下载安装包 Download a Free Trial of Charles • Charles Web Debugging Proxy

使用Servlet上传多张图片——访问提示

上传文件,我们在做项目中补课避免的,有时候我们需要上传单张或者单个文件,但是有时候我们就需要上传多个文件或者多张图片了,我们这里以多张(4张)图片为例,再多也都是一样的概念,接下…

云计算设计模式(六)——命令和查询职责分离(CQRS)模式

隔离,通过使用不同的接口,从操作读取数据更新数据的操作。这种模式可以最大限度地提高性能,可扩展性和安全性;支持系统在通过较高的灵活性,时间的演变;防止更新命令,从造成合并在域级别上的冲突。 背景和问题 在传统的…

Intellij IDEA 那些隐藏好用的小技巧

转载自 Intellij IDEA 那些隐藏好用的小技巧 概述 之前写了一篇介绍IntellIJ IDEA的文章《 Intellij Idea非常6的10个姿势 》,主要是列出一些平时大家可能没用过或者没怎么用,但是又非常好用的IntellIJ IDEA小技巧。由于篇幅原因,只是列出了…

约瑟夫(环)问题(Josephu)(单向环形链表)

问题描述 代码实现 package com.atguigu.linkedlist;import com.sun.org.apache.bcel.internal.generic.NEW;/*** 创建人 wdl* 创建时间 2021/3/19* 描述*/ public class Josepfu {public static void main(String[] args) {//测试一把看看构建的环形链表和遍历是否正确Circle…

使用Servlet上传多张图片——实体层(ProductInfo.java)

package orz.treeSquirrels.entity; /*** 商品信息表的实体类* author Administrator**/ public class ProductInfo {private int productId; //商品编号private String productName; //商品名称private float price; //商品价格private String details; //商品详情…

vue+vscode+nodejs 开发环境搭建

参考文献 vuevscodenodejs 开发环境搭建 - Desperador - 博客园 nodejs 指定全局安装路径和缓存路径 - Curedfisher - 博客园 安装配置nodejs并创建Vue项目 vscode下载地址: Documentation for Visual Studio Code nodejs安装配置 1.下载 地址: …

用数组模拟栈

思路分析 代码实现 package com.atguigu.stack;import com.sun.org.apache.xml.internal.dtm.ref.sax2dtm.SAX2DTM2;import java.net.ServerSocket; import java.util.ArrayList; import java.util.Scanner; import java.util.Stack;/*** 创建人 wdl* 创建时间 2021/3/20* 描述…

Redis PK Memcached,哪个更牛叉

转载自 Redis PK Memcached,哪个更牛叉 说到 redis 就会联想到 memcached,反之亦然。了解过两者的同学有那么个大致的印象: redis 与 memcached 相比,不仅支持简单的 key-value 数据类型,同时还提供 list,set,zset,ha…

CoreCLR源码探索(三) GC内存分配器的内部实现

在前一篇中我讲解了new是怎么工作的, 但是却一笔跳过了内存分配相关的部分.在这一篇中我将详细讲解GC内存分配器的内部实现.在看这一篇之前请必须先看完微软BOTR文档中的"Garbage Collection Design",原文地址是: https://github.com/dotnet/coreclr/blob/master/Doc…

使用Servlet上传多张图片——Dao层(BaseDao.java)

package orz.treeSquirrels.dao;import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List;/*** * * 项目名称:test_uploadFile …

vue学习1

P1 01_Vue学习目标03:50 P2 02_前端知识体系16:27 P3 03_前后端分离的演变史17:13 P4 04_前端MVVM模式09:31 P5 05_Vue是什么07:23 P6 06_第一个Vue应用程序07:06 P7 07_Vue实例声明周期05:35 P8 08_条件渲染06:59 P9 09_列表渲染03:34 P10 10_事件处理03:44…

使用Servlet上传多张图片——Dao层(ProductInfoDao.java)

package orz.treeSquirrels.dao;import orz.treeSquirrels.entity.ProductInfo;/*** 商品信息表的接口* author Administrator**/ public interface ProductInfoDao {//添加public int addProductInfo(ProductInfo pro);}对应的实现类(ProductInfoDaoImpl.java): pa…

Tomcat 的 Server 文件配置详解

转载自 Tomcat 的 Server 文件配置详解 前言 Tomcat隶属于Apache基金会,是开源的轻量级Web应用服务器,使用非常广泛。server.xml是Tomcat中最重要的配置文件,server.xml的每一个元素都对应了Tomcat中的一个组件;通过对xml文件中…