数据结构——单链表的Java实现

Java实现数据结构之单链表(创建,插入,删除)结点 本篇文章主要介绍针对单链表的基本操作,包括前期的创建顺序链表,插入及删除的实现,最后是对单链表的遍历,代码基于Java语言实现。 1.创建结点 单链表的结点包含两部分,数据域存储相关数据,指针域存储下一个结点的地址,如果没有其值为null,在这里定义一个私有的结点类即可:数据类型可任意指定,示例选用字符串 //结点类 private class Node{ private Strin... 阅读详情

以前我只是单纯用数组,数组它有固定的长度,是有缺点的,不能随意改变它的长度,而链表可以插入和删除大量元素。

接下来我来介绍下单链表

什么是单链表呢

 链表的每个结点中只包含一个指针域,叫做单链表(即构成链表的每个结点只有一个指向直接后继结点的指针,且尾节点的指针为null)。

结点结构如下:

接下来呢,我举一个简单的存储整数的单链表的列子 
一.存储整数的单链表分为三部分 
1.结点 
2.接口 
3.链表 
1.结点类,在接口中主要定义结点数据,指针属性,还有Node类的构造方法,方便在链表中去穿如何添加数据, 
下面是结点接口Node类的代码

//结点类Node
public class Node {
//数据
int data;
//指针,或者可以说是下一个结点
Node next;
//创建一个无参的构造,便于初始化时使用
public Node(){
}
//创建一个有参数的构造方法,便于给结点传入数据
public Node(int data){
    this.data=data;
}
}

2.接口类,我们在接口中定义一些删除整数,添加整数,获取整数,修改,插入,以及获取整数个数的方法。 
在链表中就能接口来调用者些方法;下面我来给出它的代码

//接口myList类,用来定义存储链表数据的方法
public interface myList {
    //存储
    public void add(int e);
    //插入 
    public void insert(int e,int index);
    //删除
    public void delete(int index);
    //获取元素
    public int get(int index);
    //修改
    public void modify(int e,int index);
    //获取元素个数
    public int getSize();
}

3.在链表类中通过继承接口myList,我们就可以通过创建对象调用接口中定义的方法,比如删除、获取整数等等; 
在链表中有3个重要的属性,分别是头结点,尾节点,元素个数; 
1.头结点:头结点的指针next是指向第一结点 
2.尾节点:最后一个结点 
3.元素个数 
下面是编写链表类的代码

下面我来添加几个图片来展示下删除,插入的情况其实删除整数和插入整数的情况差不多。

下面的图片是删除整数方法的情况,删除整数就是把index下标所处的node结点的data数据赋值为0,node的指针next置为空,然后在把index-1的指针指向index+1的结点就可以了 

下面是链表类中删除整数的代码

 @Override
    //删除整数
    public void delete(int index) {
        // TODO Auto-generated method stub
        checkindex(index);
        Node node=head.next;
        //找到下标index
        for(int i=0;i<index;i++){
            node=node.next;
        }
        //找到下标index-1
        Node node1=head.next;
        for(int i=0;i<index-1;i++){
            node1=node1.next;
        }
        if(index!=0){//假设index不等于0;不是第一个节点
            if(index==size-1){//假设是最后一个
                node1.next=null;    
            }
            else {//假设不是最后一个
                node1.next=null;
                node1.next=node.next;
            }
            //设置node的指针为空,node的值为空
            node.next=null;
            node.data=0;
        }
        else{//假设index等于0
            head.next=null;
            head.next=node.next;
            node.next=null;
            node.data =0;
        }
        size--;
    }

下面的图片是插入整数方法的情况,插入整数就是先把index-1所处的结点node1的指针置空,然后再把要index-1结点的指针指向要插入的结点,然后再把要插入的结点node2的指针指向结点node就行了。 

 //插入整数
    public void insert(int e, int index) {//形参index表示结点所处位置的下标
        // TODO Auto-generated method stub
        checkindex(index);
        Node node=head.next;
        //找到下标index
        for(int i=0;i<index;i++){
            node=node.next;
        }
        //找到下标index-1
        Node node1=head.next;
        for(int i=0;i<index-1;i++){
            node1=node1.next;
        }
        //创建一个新节点,为要插入的节点
        Node node2=new Node(e);
        if(index==0){//如果插入的位置是第一个节点
            head.next=null;
            head.next=node2;
        }else{
            node1.next=null;
            node1.next=node2;
        }
            node2.next=node;
        size++;

    }

接下来是单链表Link类的全部代码,其他的获取元素个数,修改整数,存储整数,获取整数都在里面

public class Link implements myList{
    //头结点,尾节点
    Node head,tail;
    //元素个数
    int size;
    public Link(){
        head = new Node();
        tail = head;
        size = 0;
    }

    @Override
    //存储整数
    public void add(int e) {//形参e表示要添加的整数
        // TODO Auto-generated method stub
        //创建一个新的结点
        Node node = new Node(e);
        //设置尾结点的下一个节点为新结点
        tail.next=node;
        //设置尾结点为新结点
        tail=node;
        //元素个数加一
        size++;
    }

    @Override
    //插入整数
    public void insert(int e, int index) {//形参index表示结点所处位置的下标
        // TODO Auto-generated method stub
        checkindex(index);
        Node node=head.next;
        //找到下标index
        for(int i=0;i<index;i++){
            node=node.next;
        }
        //找到下标index-1
        Node node1=head.next;
        for(int i=0;i<index-1;i++){
            node1=node1.next;
        }
        //创建一个新节点,为要插入的节点
        Node node2=new Node(e);
        if(index==0){//如果插入的位置是第一个节点
            head.next=null;
            head.next=node2;
        }else{
            node1.next=null;
            node1.next=node2;
        }
            node2.next=node;
        size++;

    }

    @Override
    //删除整数
    public void delete(int index) {
        // TODO Auto-generated method stub
        checkindex(index);
        Node node=head.next;
        //找到下标index
        for(int i=0;i<index;i++){
            node=node.next;
        }
        //找到下标index-1
        Node node1=head.next;
        for(int i=0;i<index-1;i++){
            node1=node1.next;
        }
        if(index!=0){//假设index不等于0;不是第一个节点
            if(index==size-1){//假设是最后一个
                node1.next=null;    
            }
            else {//假设不是最后一个
                node1.next=null;
                node1.next=node.next;
            }
            //设置node的指针为空,node的值为空
            node.next=null;
            node.data=0;
        }
        else{//假设index等于0
            head.next=null;
            head.next=node.next;
            node.next=null;
            node.data =0;
        }
        size--;
    }

    @Override
    //获取整数
    public int get(int index) {
        // TODO Auto-generated method stub
        //找到下表index
        Node node=head.next;
        //从头节点开始,依次向后查找
        for(int i=0;i<index;i++){
            node = node.next;
        }

        return node.data;
    }

    @Override
    //修改整数
    public void modify(int e, int index) {
        // TODO Auto-generated method stub
        //找到下表index
        Node node=head.next;
        //从头节点开始,依次向后查找
        for(int i=0;i<index;i++){
            node = node.next;
        }
        Node node1=new Node(e);
        node.data=e;
    }

    @Override
    //获取元素个数
    public int getSize() {
        // TODO Auto-generated method stub
        return size;
    }
    //检查index值是否合格
    public void checkindex(int index){
        if(index<0||index>size){
            throw new IndexOutOfBoundsException("参数不符合要求");
        }
    }
    public static void main(String [] args){
        Link link = new Link();
        //添加数据
        link.add(12);
        link.add(34);
        link.add(56);
        link.add(78);
        link.add(90);
        //遍历列表
                for(int i=0;i<link.getSize();i++){
                    //取出元素
                    int e=link.get(i);
                    //输出元素
                    System.out.println("第"+i+"个元素是:"+e);

                }
    }

}

 

Java|数据结构——Java单链表的实现 欢迎点击「算法与编程之美」↑关注我们!本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。问题描述数据结构在计算机科学中是一门综合性的专业基础课,... 阅读详情

相关推荐

用Keil5给CH552G编程:手把手配置8051开发环境+LED闪烁实战

本文详细介绍了如何使用Keil5为CH552G单片机配置8051开发环境,并完成LED闪烁实战。从获取必要软件、安装WCH器件库到创建工程、编写程序及烧录,手把手指导开发者避开常见陷阱,特别适合从STC转向CH552G的开发者。

weixin_30733003的博客 537

Java数据结构 - 单链表的模拟实现

单链表是数据结构链表中的其中一种,与之对应的还有双链表,此处模拟实现的单链表主要实现其增删查改,搜索,遍历等功能。

2502_91437895的博客 866

【脚本篇】---spyglass lint脚本

【代码】【脚本篇】---spyglass lint脚本。

冬瓜 6355

Java实现单链表及相关操作

单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的。 每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置), 元素就是存储数据的存储单元, 指针就是连接每个结点的地址数据。 单链表结构图: 先建一个结点类 /** * @auther: lawt * @date: 2018/11/4 0...

田维常 2586

GPD源码分析

gpd使用示例 先看下面一段代码,为标准gpd算法的使用方法,可以看到输入为点云,cloud_camera_; 输入:std::unique_ptr<gpd::util::Cloud> cloud_camera_ 输出: std::vector<std::unique_ptr<gpd::candidate::Hand>> grasps; // detect grasp poses gpd对象:std::unique_ptr<gpd::GraspDetect.

weixin_41003113的博客 2331

Jetson Orin NX上PyTorch环境搭建与性能优化指南

本文详细指导如何在Jetson Orin NX上搭建高效的PyTorch开发环境。内容涵盖CUDA与cuDNN的“隐藏”配置、Miniconda虚拟环境管理、PyTorch for Jetson的正确安装与验证,并提供了电源模式设置、TensorRT加速、混合精度等关键性能优化实战技巧,帮助开发者充分释放边缘AI设备的算力。

weixin_29090089的博客 337

数据结构之单链表(java版)

数据结构就是用某种结构去储存数据

qq_42489613的博客 1714

igh ethercat 实时性测试

组备注std(us)max(us)a无锁核,无rt补丁8.38108b锁核+FIFO调度+内存锁定,无rt补丁0.9216c锁核+FIFO调度+内存锁定,+rt补丁0.9922可以看到 a组 使用ethercat不做其他优化,周期抖动非常大,且max能达到 100 多 us;通过 锁核+FIFO调度+内存锁定 进行优化,可以看到 抖动明显降低,且max 为 20 us 左右;

qq_43353632的博客 2309

Java实现单链表(步骤详解+源码)

Java实现单链表(步骤详解+源码) 欢迎大家提出问题,一起学习!

GSCY 8527

问答式AI vs 智能体(Agent):它们有什么不同?

你肯定用过 ChatGPT 或文心一言——问它一个问题,它给你一个答案。AI Agent(AI智能体)。很多人搞不清楚:它们不都是"AI"吗?有什么区别?这篇文章用一个最简单的类比,彻底讲清楚这两者的本质差异。框架特点适合人群AutoGPT完全自主执行任务,链式思考开发者MetaGPT模拟团队协作,多角色分工开发者LangChain最流行的Agent开发框架开发者Dify可视化无代码搭建Agent非技术用户Coze(扣子)字节跳动出品,国内最易用普通用户WorkBuddy。

Johnny2004的专栏 445

第201期 解锁科研效率新高度:Claude 科学技能插件(claude-scientific-skills)深度体验

科研AI助手Claude Scientific Skills开源工具为Claude大模型扩展科学能力,覆盖数据可视化、数学计算、学术格式处理等科研全流程需求。该插件支持LaTeX公式生成、自动化科研图表绘制、学术文档规范校正等功能,让研究人员通过自然语言指令即可完成专业任务。项目开源可定制,支持特定学科需求扩展,目前已托管于GitHub。使用门槛低,只需配置Claude API密钥即可快速启用,帮助科研人员从繁琐技术细节中解放,聚焦核心研究创新。

全网120W+关注AI拉呱,专注人工智能以及科技前沿! 1357

Java实现单向链表

Java实现单向链表

weixin_50394543的博客 3807

VS2019编译配置Easy3D

VS2019编译配置Easy3D

dayuhaitang1的博客 2596

数据结构——Java单链表的实现

数据结构在计算机科学中是一门综合性的专业基础课,因此对于它的理解是很重要。数据的储存结构分为顺序存储结构和链式存储结构。前一种存储结构则需要在内存中使用一块连续的内存去进行存储,通常借助程序设计语言的数组来描述。后一种存储结构无需保证元素在内存存储位置上的连续性,只需要在逻辑上相邻的元素之间用指针来指定,通常借助程序设计语言的指针类型来描述。 而Java中并没有显示的指针,无法得到每个元素的地址...

朱砂绛的博客 1338

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

java单链表数据元素个数_java实现单链表、栈、队列三种数据结构

一、单链表1、在我们数据结构中,单链表非常重要。它里面的数据元素是以结点为单位,每个结点是由数据元素的数据和下一个结点的地址组成,在java集合框架里面LinkedList、HashMap(数组加链表)等等的底层都是用链表实现的。2、下面是单链表的几个特点:数据元素在内存中存放的地址是不连续的:单链表的结点里面还定义一个结点,它里面保存着下一个结点的内存地址,在实例化对象的时候,jvm会开辟不同内...

weixin_35441226的博客 740

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【数据结构】使用 Java 实现单链表

链表 链表定义 n个节点离散分配,彼此通过指针相连,每个节点只有一个前驱节点,每个节点只有一个后续节点,首节点没有前驱节点,尾节点没有后续节点。 链表优点 插入删除快 链表缺点 存取速度慢 Java 实现单链表 public class MyNode { /** * 链表保存的数据 */ private int data; /** * 链表的下一个节点 */ private MyNode next; /**

Yuu 400

Java实现单链表数据结构

这两天翻了下大二学习的数据结构教材,因为是C++版的,看完线性表的连接存储结构—单链表,用C++实现不是很难。因为学习了java,所以就思考着如何用java实现单链表。但是C++使用的是指针,而Java实际上没有指针,但是Java有引用,实际上能用Java模拟实现单链表,而且个人感觉比C++还容易实现些。 c++使用的是结构体模拟结点,Java这里使用类模拟了一个结点。为方便访问数据域权限全部公有

xuyao12580的专栏 1018

java 数据结构_java 数据结构单链表的实现

借用知乎网友的一句话:如果说 Java 是自动档轿车,C 就是手动档吉普。数据结构呢?是变速箱的工作原理。你完全可以不知道变速箱怎样工作,就把自动档的车子从 A 开到 B,而且未必就比懂得的人慢。写程序这件事,和开车一样,经验可以起到很大作用,但如果你不知道底层是怎么工作的,就永远只能开车,既不会修车,也不能造车。但若你此生在编程领域还有点更高的追求,数据结构是绕不开的课题。数据结构中有...

weixin_39832643的博客 107

数据结构(一) 单链表的实现-JAVA

数据结构还是很重要的,就算不是那种很牛逼的,但起码得知道基础的东西,这一系列就算是复习一下以前学过的数据结构和填补自己在这一块的知识的空缺。加油。珍惜校园中自由学习的时光。按照链表、栈、队列、排序、数组、树这种顺序来学习数据结构这门课程把。 -WH 一、单链表的概念 链表是最基本的数据结构,其存储的你原理图如下图所示 上面展示的是一个单链表的存储原理图,简单易懂,head为头节点,他不存放任何...

ff00yo的博客 282

数据结构java实现单链表

java实现单链表常见操作 一、概述: 本文主要总结单链表常见操作的实现,包括链表结点添加、删除;链表正向遍历和反向遍历、链表排序、判断链表是否有环、是否相交、获取某一结点等。 二、概念: 链表: 一种重要的数据结构,HashMap等集合的底层结构都是链表结构。链表以结点作为存储单元,这些存储单元可以是不连续的。每个结点由两部分组成:存储的数值+前序结点和后序结点的指针。即有前序结点的指针又有后序...

一场梦的博客 307

JAVA数据结构与算法的学习——单链表的实现

今天用JAVA实现数据结构中的单链表,思路就不重复了,大家仔细品味代码。 第一步,在包里建立LinkList类,用于定义链表和一下操作链表的方法 LinkList类: public class LinkList { public Node head; //头引用 public Node rear; //尾引用 public Node point;//临时引用 public int len...

weixin_42404323的博客 383

JAVA实现单链表数据结构_单链表数据结构 - java简单实现

***单链表数据结构简单实现**@author jade**/public class SingleLinkedList{private Node head = null; //每个链表都存有一个空值的头结点。private Node tail = null; //链表的最后一个结点,尾结点。private int size = 0; //当前链表中的节点数目。/*** 建立一个空链表(建立其头结...

weixin_34561373的博客 77

数据结构java单链表_数据结构(一) 单链表的实现-JAVA

数据结构还是很重要的,就算不是那种很牛逼的,但起码得知道基础的东西,这一系列就算是复习一下以前学过的数据结构和填补自己在这一块的知识的空缺。按照链表、栈、队列、排序、数组、树这种顺序来学习数据结构这门课程把。-WZY一、单链表的概念链表是最基本的数据结构,其存储的你原理图如下图所示上面展示的是一个单链表的存储原理图,简单易懂,head为头节点,他不存放任何的数据,只是充当一个指向链表中真正存放数据...

weixin_39802969的博客 281

java单链表深复制_java实现单链表、栈、队列三种数据结构

一、单链表1、在我们数据结构中,单链表非常重要。它里面的数据元素是以结点为单位,每个结点是由数据元素的数据和下一个结点的地址组成,在java集合框架里面LinkedList、HashMap(数组加链表)等等的底层都是用链表实现的。2、下面是单链表的几个特点:数据元素在内存中存放的地址是不连续的:单链表的结点里面还定义一个结点,它里面保存着下一个结点的内存地址,在实例化对象的时候,jvm会开辟不同内...

weixin_39722563的博客 283

java实现一个单链表数据结构

package com.jian.utils; /** * 单链表demo * @author weijianyi *2019-11-15 */ public class TestLinked { //内部类,单链表节点的结构 class Node<T>{//使用泛型,可以存放所有类型的数据 T value;//数据 Node<?> next = n...

weijianyi的博客 266

【Java数据结构】通过Java理解和实现——顺序表和单链表

【Java】通过Java理解和实现——顺序表和单链表????线性表????顺序表????顺序表概念及结构????顺序表接口实现(注释非常详细,我????????都能看懂)????打印顺序表????在pos位置新增元素????获取顺序表长度????判断是否包含某个元素????查找某个元素对应的位置????获取pos位置的元素????给pos位置的元素设为value????删除第一次出现的数据????清空顺序表????顺序表的缺陷????链表????链表概念及结构????无头单向非循环链表接口实现(注释非常详细

DerrickWestbrook的博客 1109
下一篇: java数组队列
coder150806
博客等级 码龄8年 79粉丝 43原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值