单链表的创建和添加元素(具体代码实现) [数据结构][Java]

2023-11-01

单链表的创建和添加元素(具体代码实现)

具体代码如下(实现了单链表的创建和元素的添加):
package com.ffyc.linkedlist;

public class SingleLinkedList {
    //先初始化一个头结点,头结点不能动,头结点中不存储具体的数据
    /*
    头结点一般都是作为我们的链表类中的一个私有属性,我们创建了一个新的单链表其实就是要链表中有一个头结点就可以了
     */
    private HeroNode head = new HeroNode(0,"","");


    /*
    不考虑英雄排名的顺序将我们的结点添加到单向链表中的思路分析:

    1. 找到当前这个链表的最后一个结点
    2. 将找到的链表中的最后一个节点的指针域指向我们要添加的这个新的节点
     */
    public void add(HeroNode heroNode){
        //我们往链表中添加元素就要遍历这个链表,那么我们遍历这个链表就要创建一个辅助变量,使用这个辅助变量就可以完成对链表的遍历
        HeroNode temp = head;
        //遍历链表,找到最后一个节点
        while(true){
            //找到链表的最后
            if(temp.next == null){
                break;
            }
            //如果没有找到最后,那么就将指针后移,继续向后找
            temp = temp.next;
        }

        //当退出while循环的时候,temp就指向了链表中的最后一个元素,所以我们只需要将这个待添加结点添加到这个temp节点的后面就可以了
        temp.next = heroNode;
    }

    /*
    遍历链表 --> 也就是显示链表

    我们在做遍历操作的时候一定要创建一个辅助变量(指针),这个辅助变量(指针)的作用就是帮助我们来遍历链表

    那么我们为什涉及到遍历就要通过一个辅助变量(指针)来完成?

    - 因为我们涉及到遍历操作的时候我们就要一个一个节点的去遍历,我们对于遍历的操作肯定是要放到循环中实现,
    那么在循环中我们可以通过第一个节点获取到第二个节点,但是当我们使用第一个节点调用next属性获得第二个节
    点的时候,这个时候我们就不能获取到第三个结点了,因为我们的获取到的第二个节点都还是临时的,所以我们就要让我们
    获取到的第二个节点固定下来,这个时候我们就要使用一个变量来接收这个第二个节点,这样我们的第二个节点就被固
    定了下来,那么我们就可以使用这个固定的结点去完成一个循环,一直向下遍历:

    - 总结: 其实我们遍历就是从第一个节点走到最后一个节点,那么我们就要使用一个临时变量(或者说辅助变量或者辅助指针)
    去和我们所有的结点一个一个的去接触 ---> 就是将一个个的结点都赋给temp变量
     */
    public void list(){
        //首先我们要判断链表是否为空
        if(head.next == null){
            System.out.println("链表为空");
            return;
        }

        //因为头结点不能动,所有我们需要一个辅助变量来遍历链表
        HeroNode temp = head.next;
        while(true){
            //判断当亲是否已经到链表的最后
            if(temp == null){
                break;
            }
            //输出结点的信息
            System.out.println(temp);

            //将temp后移
            temp = temp.next;
        }
    }


}

/**
 * 这个就是我们定义的结点类:
 */
class HeroNode{
    public int no; //英雄编号 ---> 也就是英雄排名
    public String name; //人物名称
    public String nickname; //人物的外号
    public HeroNode next; //指针域 --> 指向下一个节点

    //节点类的构造器
    public HeroNode(int no, String name,String nickname){
        this.no = no;
        this.name = name;
        this.nickname = nickname;
    }

    //为了方便我们后面进行代码的测试,所以这里我们重写toString()方法,这样我们输出英雄的时候就不会是输出地址的哈希码值了

    @Override
    public String toString() {
        /*
        注意: 这里我们重写toString()方法的时候一定不要输出结点的next属性---> 也就是不要输出指针域,
        如果我们是用编译环境生成的toString()方法,那么我们一定要注意将输出next属性的语句删掉,不然我们在显示结果的
        时候就会显示的有问题,我们显示next属性的时候会将这个节点的所有的后续节点全部输出
         */
        return "HeroNode{" +
                "no=" + no +
                ", name='" + name + '\'' +
                ", nickname='" + nickname + '\'' +
                '}';
    }
}
这里我们给出测试程序:
package com.ffyc.linkedlist;

public class SingleLinkedListTest {
    public static void main(String[] args) {
        //先创建一些结点:
        HeroNode hero1 = new HeroNode(1,"宋江","及时雨");
        HeroNode hero2 = new HeroNode(2,"卢俊义","玉麒麟");
        HeroNode hero3 = new HeroNode(3,"吴用","智多星");
        HeroNode hero4 = new HeroNode(4,"林冲","豹子头");

        //创建一个链表
        SingleLinkedList singleLinkedList = new SingleLinkedList();

        //向链表中加入元素
        singleLinkedList.add(hero1);
        singleLinkedList.add(hero2);
        singleLinkedList.add(hero3);
        singleLinkedList.add(hero4);

        //打印结果(也就是显示结果)
        singleLinkedList.list();
    }
}

补充:

while(temp.next != null) 循环退出之后temp指向了链表中最后一个元素的位置

while(temp != null) 循环退出之后temp指向了链表中最后一个节点的下一个位置

  • 就是指向了一个空位置,这个位置上没有元素
    • 指向了最后一个结点的下一个位置其实是我们为了更好的理解,其实就是指向了一个null,内存中根本就没有这个位置

temp = head 或者 temp = head.next等等都是指明从哪个结点开始

while循环的循环控制添加则是判断中间的的过程是如何执行的,以及从哪个结点结束

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单链表的创建和添加元素(具体代码实现) [数据结构][Java] 的相关文章

  • 热重载在docker中运行的java程序

    我开发了一个java程序 应该在docker中运行 然而 我在调试docker中运行的java程序时遇到了很多痛苦 我在网上搜索 一些教程提出了像 spring dev tools 这样的工具 因为我的java程序是基于spring boo
  • Java 中的 XPath 节点集

    我在 eclipse 中有这段代码 NodeSet nodes NodeSet xPath evaluate expression inputSource XPathConstants NODESET 它给我 NodeSet 上的编译时错误
  • 解决错误:日志已在具有多个实例的atomikos中使用

    我仅在使用atomikos的实时服务器上遇到问题 在我的本地服务器上它工作得很好 我在服务器上面临的问题是 init 中出错 日志已在使用中 完整的异常堆栈跟踪 java lang RuntimeException Log already
  • 在浏览器中点击应用程序时播放框架挂起

    我正在 Play 中运行一个应用程序activator run 也许 5 次中有 3 次 它会挂起 当我去http localhost 9000 它就永远坐在那里旋转 我看到很多promise timed out错误也 我应该去哪里寻找这个
  • 一种使用 Java Robot API 和 Selenium WebDriver by Java 进行文件上传的解决方案

    我看到很多人在使用 Selenium WebDriver 的测试环境中上传文件时遇到问题 我使用 selenium WebDriver 和 java 也遇到了同样的问题 我终于找到了解决方案 所以我将其发布在这里希望对其他人有所帮助 当我需
  • jdbc4.MySQLSyntaxErrorException:数据库中不存在表

    我正在使用 SpringBoot 开发一个网络应用程序 这是我的application properties文件来指定访问数据库的凭据 spring datasource driverClassName com mysql jdbc Dri
  • hibernate总是自己删除表中的所有数据

    您好 我正在开发一个 spring mvc 应用程序 它使用 hibernate 连接到存储文件的 mysql 数据库 我有两个方法 一个方法添加我选择的特定文件路径中的所有文件 另一种方法调用查询以返回从 mysql 存储的文件列表 问题
  • OnClick 事件中的 finish() 如何工作?

    我有一个Activity一键退出Activity 通过layout xml我必须设置OnClick事件至cmd exit调用 this finish 效果很好 public void cmd exit View editLayout thi
  • Prim 的迷宫生成算法:获取相邻单元格

    我基于 Prim 算法编写了一个迷宫生成器程序 该算法是 Prim 算法的随机版本 从充满墙壁的网格开始 选择一个单元格 将其标记为迷宫的一部分 将单元格的墙壁添加到墙壁列表中 While there are walls in the li
  • 将多模块 Maven 项目导入 Eclipse 时出现问题 (STS 2.5.2)

    我刚刚花了最后一个小时查看 Stackoverflow com 上的线程 尝试将 Maven 项目导入到 Spring ToolSuite 2 5 2 中 Maven 项目有多个模块 当我使用 STS 中的 Import 向导导入项目时 所
  • 应用程序关闭时的倒计时问题

    我制作了一个 CountDownTimer 代码 我希望 CountDownTimer 在完成时重新启动 即使应用程序已关闭 但它仅在应用程序正在运行或重新启动应用程序时重新启动 因此 如果我在倒计时为 00 10 分钟 秒 时关闭应用程序
  • Tomcat 6找不到mysql驱动

    这里有一个类似的问题 但关于类路径 ClassNotFoundException com mysql jdbc Driver https stackoverflow com questions 1585811 classnotfoundex
  • 使用 SAX 进行 XML 解析 |如何处理特殊字符?

    我们有一个 JAVA 应用程序 可以从 SAP 系统中提取数据 解析数据并呈现给用户 使用 SAP JCo 连接器提取数据 最近我们抛出了一个异常 org xml sax SAXParseException 字符引用 是无效的 XML 字符
  • 运行 Jar 文件时出现问题

    我已将 java 项目编译成 Jar 文件 但运行它时遇到问题 当我跑步时 java jar myJar jar 我收到以下错误 Could not find the main class myClass 类文件不在 jar 的根目录中 因
  • Keycloak - 自定义 SPI 未出现在列表中

    我为我的 keycloak 服务器制作了一个自定义 SPI 现在我必须在管理控制台上配置它 我将 SPI 添加为模块 并手动安装 因此我将其放在 module package name main 中 并包含 module xml 我还将其放
  • Android JNI C 简单追加函数

    我想制作一个简单的函数 返回两个字符串的值 基本上 java public native String getAppendedString String name c jstring Java com example hellojni He
  • Java - 不要用 bufferedwriter 覆盖

    我有一个程序可以将人员添加到数组列表中 我想做的是将这些人也添加到文本文件中 但程序会覆盖第一行 因此这些人会被删除 如何告诉编译器在下一个空闲行写入 import java io import java util import javax
  • 休眠以持久保存日期

    有没有办法告诉 Hibernate java util Date 应该持久保存 我需要这个来解决 MySQL 中缺少的毫秒分辨率问题 您能想到这种方法有什么缺点吗 您可以自己创建字段long 或者使用自定义的UserType 实施后User
  • 如何修复“sessionFactory”或“hibernateTemplate”是必需的问题

    我正在使用 Spring Boot JPA WEB 和 MYSQL 创建我的 Web 应用程序 它总是说 sessionFactory or hibernateTemplate是必需的 我该如何修复它 我已经尝试过的东西 删除了本地 Mav
  • javax.persistence.Table.indexes()[Ljavax/persistence/Index 中的 NoSuchMethodError

    我有一个 Play Framework 应用程序 并且我was使用 Hibernate 4 2 5 Final 通过 Maven 依赖项管理器检索 我决定升级到 Hibernate 4 3 0 Final 成功重新编译我的应用程序并运行它

随机推荐

  • ERROR: No matching distribution found for git

    问题描述 ERROR Could not find a version that satisfies the requirement git from versions none ERROR No matching distribution
  • 【html初识】HTML基础认知

    1 1 1认识网页 1 网页有哪些部分组成 文字 图片 视频 音频 超链接 2 网页背后的本质是什么 前端程序员写的代码 3 前端的代码通过什么软件转换成用户眼中的页面 通过浏览器转化 解析和渲染 成用户看到的网页 4 五大浏览器和渲染引擎
  • python 程序结构

    目录 1 顺序结构 2 分支结构 单分支 双分支 多分支 3 循环结构 for循环 while循环 例 九九乘法表 for 方法 while方法 1 顺序结构 顺序结构是最简单的程序结构 也是最常用的程序结构 只要按照解决问题的顺序写出相应
  • 面试准备:Java新特性详解

    文章目录 Java语言新特性 1 Lambda表达式和函数式接口 2 接口的默认方法和静态方法 3 方法引用 4 重复注解 5 更好的类型推断 6 拓宽注解的应用场景 Java编译器新特性 参数名称 JVM的新特性 更多资料 参考 java
  • v-model

    十 v model 10 1 v model的基本使用 div div
  • 【每日一题】分割数组

    分割数组 两次遍历 一次遍历 优化空间复杂度 题目链接 题目描述 给定一个数组 nums 将其划分为两个连续子数组 left 和 right 使得 left 中的每个元素都小于或等于 right 中的每个元素 left 和 right 都是
  • vector 不是模板 报错解决

    目录 vector 不是模板 报错解决 嵌套vector 批量修改失败 嵌套vector 批量修改OK vector 不是模板 报错解决 list和vector在命名空间std里 因此只需要在vector前加std 即可 include
  • 【王道考研 操作系统】【第三章】内存空间扩容 覆盖、交换、虚拟存储技术 页面置换算法

    目录 第三章 2 内存管理 2 2 内存空间扩充 2 2 1 覆盖技术 2 2 2 交换技术 2 2 3 虚拟存储技术 2 2 3 1 请求分页存储管理 2 2 3 2 页面置换算法 2 2 3 3 页面分配策略 2 3 地址转换 2 4
  • IT资产管理开源软件-GLPI安装手册

    GLPI是法语Gestionnaire libre de parc informatique的缩写 是一款历史悠久的资产管理开源软件 GLPI提供功能全面的IT资源管理接口 可以用来建立数据库全面管理IT的电脑 显示器 服务器 打印机 网络
  • 【Java之多线程篇】——吐血整理Java多线程详解(知识点+代码)

    目录 线程基本概念 并行 并发的区别 多线程优点和何时使用多线程 多线程创建的两种方式 继承Thread类 实现Runnable接口 代码 Thread类中的常用方法 线程的生命周期 线程的同步 用线程同步解决线程安全问题的方式 一 同步代
  • 找工作的英文自我介绍

    找工作的英文自我介绍 Good morning It s my great honor to be here for this interview Now allow me to introduce myself briefly My na
  • python基础入门系列

    基础篇 一 python基础入门 二 python程序的编写运行 三 pycharm的安装使用 四 python的包管理 五 python的repl 提高篇 OpenCV学习 一 opencv python安装与初步认识 二 opencv对
  • Linux——网络基础概论

    网络基本概念 概念 网络是由若干结点和连接这些结点的链路组成 网络中的结点可以是计算机 交换机 路由器等设备 即将不同的终端设备连接起来 网络设备 路由器 网络层 集线器 物理层 交换机 数据链路层 网络线路 网线 双绞线100m 同轴电缆
  • IntelliJ IDEA2020安装使用(保姆级)

    IntelliJ IDEA安装使用 保姆级 文章目录 IntelliJ IDEA安装使用 保姆级 1 0 IntelliJ IDEA 介绍 1 1 IDEA 的主要优势 1 2 IDEA的下载地址 1 3 IDEA安装要求 1 3 1 JD
  • 机器人编程和编程有什么区别

    机器人编程和编程有什么区别 很多的家长在培养孩子的学习方面也可以说是相当的耐心的 他们会给孩子选择一些能够有利于孩子成长的课程 就拿现在很多的家长想要孩子去学习机器人编程的课程来说 有的家长对于机器人编程和编程有什么区别并不是很清楚 今天我
  • 网络安全-CDN绕过寻找真实IP

    网络安全 CDN绕过寻找真实IP CDN就是CDN加速 就是根据你的目标让你访问的更快 CDN CDN 即内容分发网络 主要解决因传输距离和不同运营商节点造成的网络速度性能低下的问题 说得简单点 就是一组在不同运营商之间的对接节点上的高速缓
  • bfs 模版

    player 队列q marked数组 dist数组 前驱pre数组 这里说数组指的是顶点是按0 V 1编好号的情况 如果没编号 就用一般的symbol table比如map unordered map 另外前驱一般情况是多个 即一般应该定
  • eclipse中在lib目录下添加或删除jar包,Referenced Libraries无法同步问题

    eclipse版本 myeclipse 9 0 以前用myeclipse 6 5的时候 在lib目录下添加或删除jar包 Referenced Libraries是可以同步的 现在换成myeclipse 9 0就不行了 只能在java bu
  • matlab读取excel文件详解

    MATLAB是一种十分强大的科学计算软件 不仅可以进行数值计算 矩阵运算 还可以处理Excel CSV和其他常见格式的数据 在现实生活中 Excel文件是非常常见的数据文件 它包含了各种信息 诸如数据记录 计算和预测等 MATLAB提供了一
  • 单链表的创建和添加元素(具体代码实现) [数据结构][Java]

    单链表的创建和添加元素 具体代码实现 具体代码如下 实现了单链表的创建和元素的添加 package com ffyc linkedlist public class SingleLinkedList 先初始化一个头结点 头结点不能动 头结点