数据结构(3)-从零开始实现一个java链表

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

数据集合是编程中常用的逻辑,链表是在数据结构中经常被用到和考察,JDK util 包中提供了Queue 接口,
LinkedList、LinkedHashSet、LinkedHashMap<K,V>实现。
显而易见,linkedHashSet 是以LinkedHashMap<K,V> 为基础来实现的。

 /**
     * Constructs a new, empty linked hash set.  (This package private
     * constructor is only used by LinkedHashSet.) The backing
     * HashMap instance is a LinkedHashMap with the specified initial
     * capacity and the specified load factor.
     *
     * @param      initialCapacity   the initial capacity of the hash map
     * @param      loadFactor        the load factor of the hash map
     * @param      dummy             ignored (distinguishes this
     *             constructor from other int, float constructor.)
     * @throws     IllegalArgumentException if the initial capacity is less
     *             than zero, or if the load factor is nonpositive
     */
    HashSet(int initialCapacity, float loadFactor, boolean dummy) {
        map = new LinkedHashMap<>(initialCapacity, loadFactor);
    }

之前在做数据采集的时候,自己动手写了一个采集程序,虽然过程曲折,但对于后期对于开源爬虫的使用很有帮助,当你自己实现了一个算法,简单引擎,再去看同类就有一种俯视的视角, 不要迷信权威 ,毕竟计算机行业发展还处于起步阶段。

什么是链表

接下来 先大概说一下链表,链表顾名思义,是由一个一个节点组成的一个数据链 ,前一个节点next 指向后一个节点,遍历的时候,根据头节点顺序找到尾节点。
链表示意图:
在这里插入图片描述

链表的实现在不同开发语言中细节不同 (),但链表的定义有一个通用的标准,引用《算法导论》中的定义

链表 linked list 是一种这样的数据结构, 其中的各对象an线性顺序排列,数组的线性顺序是由数组的下标决定,然而与数组不同的是,链表的顺序是由各个对象的指针决定的,链表为动态集合提供一种简单而灵活的表示方法。

支持 insert 、delete、pop 常用操作方法

链表节点

链表节点 首先能保存数据,这里简单选择了object 对象

然后节点中需要指向另一个节点

class Node {


    private String name;

    private Object data;

    private Node next;


    public Node(String name, Object data, Node next) {
        this.name = name;
        this.data = data;
        this.next = next;
    }

    public boolean hasNext() {
        if (null == next) {
            return false;
        } else {
            return true;
        }
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public Node getNext() {
        return next;
    }

    public void setNext(Node next) {
        this.next = next;
    }


}

这里我选择了inner class

链表的简单实现

public class LinkedList {

    /**
     * 头节点
     */
    private Node head;

    /**
     * 判断链表是否为空
     *
     * @return
     */

    private Boolean isEmpty() {
        if (null == head) {
            return true;
        } else {
            return false;
        }

    }

    /**
     * 获取头节点
     *
     * @return
     */
    public Object getHead() {
        if (null == head) {
            return null;
        } else {
            return head.getData();
        }

    }

    /**
     * 增加节点
     */
    public boolean insertData(Object data) {

        if (isEmpty()) {
            head = new Node("first", data, null);
        } else {
            Node temp=head;
            while (temp.hasNext()) {
                temp = temp.getNext();
            }
            temp.setNext(new Node("last", data, null));
        }
        return true;

    }

    /**
     * 删除节点
     */

    public boolean deleteData(Object data) {

        if (isEmpty()) {
            return false;
        } else {
            /**
             * 如果是头节点 直接删除返回
             */
            if (head.getData() == data) {
                head = head.getNext();
                return true;
            } else {
                while (head.hasNext()) {
                    Node temp = head.getNext();
                    if (temp.getData() == data) {
                        head.setNext(temp.getNext());
                        break;
                    }
                }
                return true;
            }
        }


    }
}

链表翻转

链表翻转是一道常见的算法题目,比较简单

下班给出一种简单的解题思路:

链表由于只能指向后续节点,没有下标所以要遍历链表 截断,所有你需要 借用三个新的节点

起名为:
航行节点,用于遍历链表
head 节点 用户找到新的翻转节点
rail 节点 用户找到原来的节点

a->b->c->d

sail
head
tail

sail->a->b->c->d

head->a sial->b-c-d
tail=b
head->b->a sial-c-d

   Node fake = new Node("fake", 0, null);
        Node sail = new Node("sail", 0, d);
        while (sail.hasNext()) {
            Node temp = sail.getNext();
            sail.setNext(sail.getNext().getNext());
            if (fake.hasNext()) {
                temp.setNext(fake.getNext());
                fake.setNext(temp);
            } else {
                fake.setNext(temp);
                temp.setNext(null);
            }
        }

        while (fake.hasNext()) {
            System.out.println(fake.getNext().getData());
            fake = fake.getNext();
        }
mt7601 kernel 4.19内核集成版本,以及源码编译相关问题 /os/linux/Makefile.6文件: 添加 EXTRA_CFLAGS += -Wno-incompatible-pointer-types -Wno-date-time。看下iwpriv与iwconfig的源码区别,左侧为iwconfig ,没有用到ioctl,右侧为iwpriv。1、init_timer kernel 4.19内核版本API已经改变,使用timer_setup。使用iwpriv 提示如下,iwpriv工具无法使用了,而iwconfig可以使用。makefile的修改。 阅读详情

相关推荐

告别手动点鼠标:用Python脚本批量跑ADS版图仿真,效率提升10倍(附完整代码)

本文详细介绍了如何利用Python脚本自动化ADS版图仿真流程,显著提升射频工程师的工作效率。通过调用ADS底层接口,实现参数化修改、批量任务调度和结果自动收集,解决了手动操作中的常见问题,如仿真不更新等。附完整代码,帮助开发者快速实现10倍效率提升。

weixin_42523543的博客 331

Java从0开始(11)(常见的数据结构)

常见的数据结构 栈(stack) 栈是一个先入后出(FILO-First In Last Out)的有序列表 栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。 出栈(pop)和入栈(push): 栈(Stack)是一个后进先出(Last in first...

nimwwda的博客 286

Cortex-M TrustZone实战:从硬件隔离到安全交互的嵌入式开发指南

在嵌入式系统开发中,硬件安全隔离是构建可信执行环境(TEE)的核心技术。其原理是通过处理器硬件机制,将系统资源划分为安全与非安全域,实现内存、外设和代码的强制访问控制。这项技术的核心价值在于,它能在单一芯片上为资源受限的物联网(IoT)设备、智能传感器等提供芯片级的安全基础,无需依赖外置安全元件,从而降低BOM成本并简化设计。典型的应用场景包括保护设备密钥、实现安全启动、构建安全服务(如加密、密钥管理)以供应用程序调用。本文聚焦于Arm Cortex-M系列微控制器上的TrustZone技术实现,针对开发中

weixin_42639246的博客 300

数据结构之链表(Java实现)

数据结构中线性表的重要知识之一

Easenyang的博客 9317

避坑指南:PyTorch ConvLSTM参数配置的那些坑(hidden_dim/kernel_size/num_layers详解)

本文深度解析PyTorch ConvLSTM中hidden_dim、kernel_size和num_layers三大核心参数的配置技巧,提供实战指南和性能优化建议。通过实验数据揭示参数组合的内在规律,帮助开发者避免常见配置陷阱,提升时空序列建模效果。特别针对视频预测、气象预报等应用场景,给出黄金参数组合方案和调试技巧。

vv45678的博客 702

抓包工具(五)2025版 Burp Suite Professional的下载、安装、使用

抓包工具(五)2025版 Burp Suite Professional的下载、安装、使用

ACGkaka的博客 2万+

【数据结构】链表的原理及java实现

一:单向链表基本介绍链表是一种数据结构,和数组同级。比如,Java中我们使用的ArrayList,其实现原理是数组。而LinkedList的实现原理就是链表了。链表在进行循环遍历时效率不高,但是插入和删除时优势明显。下面对单向链表做一个介绍。单向链表是一种线性表,实际上是由节点(Node)组成的,一个链表拥有不定数量的节点。其数据在内存中存储是不连续的,它存储的数据分散在内存中,每个结点只能也只有它

简约人生的博客 11万+

Halcon 形态学 开发案例 (开运算opening(先腐蚀再膨胀)、闭运算closing(先膨胀再腐蚀))

算子方法:功能:使用用户自定义的结构元素对区域进行开运算参数: Region(输入参数) :输入区域 StructElement(输入参数) :结构元素(区域) RegionOpening(输出参数) :开运算后的区域功能:使用圆形结构元素对区域进行开运算参数: Region(输入参数) :输入区域 RegionOpening(输出参数) :开运算后的区域 Radius(输入参数) :圆形结构元素的半径功能:使用矩形结构元素对区域进行开运算。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1618

从零开始手撕一个数据结构(1)——双向链表

前言 刚做完某厂的笔试,要求实现一个LRU算法,没有复习到LRU的我直接就凉了一半了 闲着没事把数据结构都过一遍吧,加深一下印象 作为《从零开始手撕一个数据结构》的第一篇,先从最简单的链表开始吧~ 文章目录前言一、要实现一个什么样的结构?二、实现步骤1. 核心定义1) 创建链表容器类LinkedList2)定义链表核心内部类ListNode2. 方法实现1)添加元素的add方法2)查询元素的get方法3)删除元素的remove方法4)修改元素的set方法5)返回当前链表长度的size方法总结 一、要实

Yuc0114的博客 1425

《派出你的AI同事:WorkBuddy案例实战》062:投研资讯摘要与预警

投研资讯摘要与预警:新闻、公告、行情交给 AI 同事提炼与预警,投研从“刷资讯”变成“读摘要”。

LuckyHanMo的博客 182

小目标检测之改进的YOLOV11算法

MASF-YOLO通过多尺度特征聚合注意力增强自适应融合三大核心创新,显著提升了无人机视角下的小目标检测性能。

hasakie的博客 1717

数据结构-3.Java. 链表

由于链表没有将元素存储在连续的空间中,元素存储在单独的节点中,然后通过引用将节点连接起来了,因此在在任意位置插入或者删除元素时,不需要搬移元素,效率比较高。说明:1. LinkedList实现了List接口2. LinkedList的底层使用了双向链表3. LinkedList没有实现RandomAccess接口, 因此LinkedList不支持随机访问4. LinkedList的任意位置插入和删除元素时的效率比较高,时间复杂度为O(1)5. LinkedList比较适合任意位置插入的场景。

薯条不要番茄酱的博客 2002

小程序跳转链接实战:https://wxaurl.cn/、weixin://dl/business/ 跳转与明文 URL Scheme 生成指南

本文聚焦小程序跳转链接开发核心技术,深入解析 https://wxaurl.cn/*TICKET* 与 weixin://dl/business/?t= *TICKET* 两种链接的生成方法。详细阐述生成前的准备工作、服务端接口调用步骤及注意事项,同时剖析 iOS 与 Android 系统在链接适配方面的差异。此外,针对明文 URL Scheme 获取,从平台设置、拼接规则、使用限制等方面展开讲解,并结合实际应用案例提出优化建议,帮助开发者快速掌握小程序跳转链接生成与明文URL Scheme获取的关键技术。

邓邓子的博客 2万+

数据结构之链表(java语言实现)

数据结构之链表(java语言实现)

LNsupermali的博客 4069

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Java——数据结构之双向链表

文章目录1.单链表的实现(1)定义一个节点类型(2)头插法(3)尾插法(4)根据下标插入节点(5)查找关键字(6)删除第一次出现的关键字(7)删除所有出现的关键字key(8)节点的回收(9)链表打印展示2.完整代码展示完!   接上篇Java——数据结构之单链表   在之前的学习中,我们主要了解了很多 Java 的 基本语法,但是 在之后的 Java学习中,了解 基础 数据结构的知识 非常重要,数据结构的思想 可以帮助我们更加清晰 明白的了解 Java 的解题思路等等。   今天我们就来开始学习 实现一

rain67的博客 2659

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

从零开始手撕一个数据结构(2)——基于链表实现栈和队列

系列文章目录 从零开始手撕一个数据结构(1)——双向链表 文章目录系列文章目录前言栈容器设计一、要设计哪些实例方法?二、实现步骤1. 核心定义1)创建基于双链表的栈容器类LinkedStack2)定义双链表节点内部类Node2. 方法实现1)入栈方法push2)出栈方法pop3)获取栈顶元素方法peek4)检验栈是否为空方法isEmpty()3. 测试队列容器设计一、要设计哪些实例方法?二、实现步骤1. 核心定义1)创建基于单链表的栈容器类LinkedStack2)定义单链表节点内部类Node2. 方法实

Yuc0114的博客 1295

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java——数据结构之单链表

文章目录Java——数据结构之单链表1. 链表的概念及结构2.单链表的实现(1)定义一个节点类型(2)头插法(3)尾插法(4)根据下标插入节点(5)查找关键字(6)删除第一次出现的关键字(7)得到单链表的长度(8)单链表打印展示(9)节点的回收3.完整代码的展示完! Java——数据结构之单链表 本次内容介绍大纲   在之前的学习中,我们主要了解了很多 Java 的 基本语法,但是 在之后的 Java学习中,了解 基础 数据结构的知识 非常重要,数据结构的思想 可以帮助我们更加清晰 明白的了解 Ja

rain67的博客 2654

【单链表】数据结构,详解单链表,java实现代码

单链表基本操作,详解单链表

程序员良辰 2659

链表-Java实现链表数据结构

链表通常由一连串节点组成,每个节点包含任意的实例数据(data fields)和一或两个用来指向上 一个/或下一个节点的位置的链接(“links”) 链表(Linked list):是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数 据,而是在每一个节点里存到下一个节点的指针(Pointer)。 使用链表结构可以克服数组需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针 域,空间开销比较.

♾️ 2737

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

目录链表介绍Java->链表APIJava->链表代码使用链表示例 链表介绍 链表属于线性表的一种 如果想了解Java实现的顺序表,请戳这里:【数据结构】使用Java实现顺序表类 SeqList Java->链表API 在看代码之前,我们先看看链表需要完成什么任务,也就是链表的API,这样有助于理解代码,也有助于快速查找自己想实现的功能。 LinkList(): 构造函数 cl...

qq_41427568的博客 5656

java 链表数据结构实现

java 链表数据结构说明本文适合初学java想要了解数据结构的人,操作正确下面的代码都是可以工作的,如果不能与我联系我会改。java没有指针,虽然没有办法直接访问内存,但是java中有引用,可以引用一块内存空间,所以我们可以用java的指针模型,来实现链表数据结构。我会构建两个类,在两个包中,IntNode类提供基本的操作,IntLinkBag类在IntNode类基础之上,提出了包的概念相当于节点的集合。

TrueSpiderBoy Blog 909

【数据结构 3】双向链表及其Java实现

一、双向链表 1.1 简介 双向链表也叫双向表,是链表的一种,它由多个结点组成,每个结点都由一个数据域和两个指针域组成,数据域用来存储数据,其中一个指针域用来指向其后继结点,另一个指针域用来指向前驱结点。 链表的头结点的数据域不存储数据,指向前驱结点的指针域值为null,指向后继结点的指针域指向第一个真正存储数据的结点。 1.2 结点API设计 类名 Node 构造方法 Node(T t,Node pre,Node next):创建Node对象 成员变量 1 T item:存储数据

Java技术工坊 479

java基础 之 实现一个链表

自己实现一个链表

oneouto的博客 875

Java 的数据结构:从数组到链表的基础实现

数组和链表各自有其优势和不足,适用于不同的场景。数组的优势在于快速访问和空间效率,但在插入和删除操作方面有所限制。链表则在动态数据处理和插入删除方面有明显的优势,特别适合频繁修改数据的应用场景。了解它们的特性和差异,将帮助你在编程中做出合适的选择。希望这篇文章能帮助你掌握 Java 中这两种重要的数据结构,提升你的编程能力。

一名热衷于技术的全栈开发者,专注于前端与后端的全面技术探索。在这里,我将分享我在技术领域的学习与成长,助力更多开发者的进步。 1210

Java数据结构之链表及实现

之前学习的顺序表查询非常快,时间复杂度为O(1),但是增删改效率非常低,因为每一次增删改都会元素的移动。可以使用另一种存储方式-链式存储结构。 链表是一种物理存储单元上非连续、非顺序的存储结构。链表由一序列的结点(链表中的每一个元素成为结点)组成。 结点API设计: 类名 Node 构造方法 Node(T t,Node next) 创建Node对象 成员变量 T item:存储数据 Node next :指向下一个结点 结点类: publi

兮遥 2040

Java 自己实现一个单链表

Java实现一个链表

ylqdh的博客 589
上一篇: 精通SpringFamework(2) -读取配置文件过程分析
下一篇: JDK 11 Object中定义的方法
hamish-wu
博客等级 码龄15年 2814粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值