链表的语法详解

发布时间:2026/8/6 3:00:59

链表的语法详解
链表一、定义✏️ 链表在计算机科学中,链表是数据元素的线性集合,其每一个元素都指向下一个元素,元素存储上并不连续1. 分类单向链表 : 每个元素只知道其下一个元素是谁双向链表 : 每个元素知道其上一个元素和下一个元素循环链表 : 通常的链表尾节点tail指向的都是null,而循环链表的tail指向的是头节点head 哨兵节点不存储数据,通常用作头尾,用来简化边界的判断‍2. 性能随机访问 : 根据index查找,时间复杂度O(n)插入或删除 :起始位置 : O(1)结束位置 : 如果已知尾节点是O(1),不知道尾节点是O(n)中间位置 : 根据index查找时间 O(1)‍二、单向链表 不带头结点的单向链表不带头结点的单向链表的代码实现如下packagelinked;importjava.util.Iterator;importjava.util.function.Consumer;/** * 单向链表 */publicclassSinglyLinkedListimplementsIterableInteger{privateNodehead;// 头指针// 当某一个内部类使用了外部类的成员变量时,就不能使用static// 如果能加最好加上static/** * 节点类 */privatestaticclassNode{intvalue;Nodenext;publicNode(intvalue,Nodenext){this.valuevalue;this.nextnext;}}/** * 头插法 * param value */publicvoidaddFirst(intvalue){/*// 1.链表为空 if(head null){ head new Node(value,null); }else{ // 2.链表非空 Node newNode new Node(value,null); newNode.next head; head newNode; }*/// 简化headnewNode(value,head);}/** * 遍历链表 */publicvoidloop1(ConsumerIntegerconsumer){Nodecurhead;// 就近原则while(cur!null){consumer.accept(cur.value);curcur.next;}}publicvoidloop2(ConsumerIntegerconsumer){for(Nodecurhead;cur!null;curcur.next){consumer.accept(cur.value);}}OverridepublicIteratorIntegeriterator(){//匿名内部类returnnewIteratorInteger(){Nodecurhead;OverridepublicbooleanhasNext(){// 是否有下一个元素returncur!null;}OverridepublicIntegernext(){// 返回当前值,并指向下一个元素intvcur.value;curcur.next;returnv;}};}/** * 找到尾节点 */privateNodefindLast(){if(headnull){returnnull;}Nodecurhead;while(cur.next!null){curcur.next;}returncur;}/** * 尾插法 */publicvoidaddLast(intvalue){NodelastfindLast();if(lastnull){addFirst(value);return;}last.nextnewNode(value,null);}/** * 根据索引查找指定的节点 * param index * return node */privateNodefindNode(intindex){if(headnull){returnnull;}inti0;for(Nodecurhead;cur!null;curcur.next,i){if(iindex){returncur;}}returnnull;// 没有找到}/** * 根据索引查找元素的值 * param index * return value */publicintget(intindex){NodecurfindNode(index);if(curnull){thrownewRuntimeException(未找到指定位置的元素,请检查您传入的索引index是否合法!);}returncur.value;}/** * 向索引位置插入结点 * param index * param value */publicvoidinsert(intindex,intvalue){if(index0){addFirst(value);}else{NodecurfindNode(index-1);if(curnullhead!null){thrownewRuntimeException(插入位置不合法);}cur.nextnewNode(value,cur.next);}}/** * 删除头节点 */publicvoidremoveFirst(){if(headnull)return;headhead.next;// 旧结点占用的内存会自动释放}/** * 删除指定索引位置的结点 * param index */publicvoidremove(intindex){if(headnull){thrownewRuntimeException(链表为空!);}if(index0){removeFirst();return;}NodecurfindNode(index-1);if(curnull){thrownewRuntimeException(删除的索引不合法!);}// 删除结点为空也报错Noderemovedcur.next;if(removednull){thrownewRuntimeException(删除的索引不合法!);}cur.nextcur.next.next;}}‍ 带头结点的单向链表带头结点的单向链表的代码实现如下packagelinked;importjava.util.Iterator;importjava.util.function.Consumer;publicclassSinglyLinkedListSentinelimplementsIterableInteger{privateNodeheadnewNode(520,null);// 哨兵结点// 当某一个内部类使用了外部类的成员变量时,就不能使用static// 如果能加最好加上static/** * 节点类 */privatestaticclassNode{intvalue;Nodenext;publicNode(intvalue,Nodenext){this.valuevalue;this.nextnext;}}/** * 头插法 * param value */publicvoidaddFirst(intvalue){insert(0,value);}/** * 遍历链表 */publicvoidloop1(ConsumerIntegerconsumer){Nodecurhead.next;// 就近原则while(cur!null){consumer.accept(cur.value);curcur.next;}}publicvoidloop2(ConsumerIntegerconsumer){for(Nodecurhead.next;cur!null;curcur.next){consumer.accept(cur.value);}}OverridepublicIteratorIntegeriterator(){//匿名内部类returnnewIteratorInteger(){Nodecurhead.next;OverridepublicbooleanhasNext(){// 是否有下一个元素returncur!null;}OverridepublicIntegernext(){// 返回当前值,并指向下一个元素intvcur.value;curcur.next;returnv;}};}/** * 找到尾节点 */privateNodefindLast(){Nodecurhead;while(cur.next!null){curcur.next;}returncur;}/** * 尾插法 */publicvoidaddLast(intvalue){NodelastfindLast();// 不可能为 nulllast.nextnewNode(value,null);}/** * 根据索引查找指定的节点 * param index * return node */privateNodefindNode(intindex){inti-1;for(Nodecurhead;cur!null;curcur.next,i){if(iindex){returncur;}}returnnull;// 没有找到}/** * 根据索引查找元素的值 * param index * return value */publicintget(intindex){NodecurfindNode(index);if(curnull){thrownewRuntimeException(未找到指定位置的元素,请检查您传入的索引index是否合法!);}returncur.value;}/** * 向索引位置插入结点 * param index * param value */publicvoidinsert(intindex,intvalue){NodecurfindNode(index-1);if(curnull){thrownewRuntimeException(插入位置不合法);}cur.nextnewNode(value,cur.next);}/** * 删除头节点 */publicvoidremoveFirst(){remove(0);}/** * 删除指定索引位置的结点 * param index */publicvoidremove(intindex){NodecurfindNode(index-1);if(curnull){thrownewRuntimeException(删除的索引不合法!);}// 删除结点为空也报错Noderemovedcur.next;if(removednull){thrownewRuntimeException(删除的索引不合法!);}cur.nextcur.next.next;}}‍三、双向链表未完待续…

相关新闻

基于NLP的文本意图识别服务构建:从规则引擎到工程实践

基于NLP的文本意图识别服务构建:从规则引擎到工程实践

2026/8/6 2:50:58

在实际开发中,我们经常需要处理来自用户或外部系统的非结构化文本输入。这些输入可能包含各种网络流行语、缩写、俚语,甚至是看似无意义的短语,比如“man!what can i say”。对于后端服务、内容审核系统或聊天机器人来说&#xff…

Unity Shader颜色控制:从片元着色器到动态调色实战

Unity Shader颜色控制:从片元着色器到动态调色实战

2026/8/6 2:50:58

1. 项目概述:从“黑盒”到“画笔”刚接触Unity Shader那会儿,总觉得它像个神秘的黑盒,尤其是看到别人用几行代码就能让材质流光溢彩,自己却连基本的颜色都调不明白。今天这个案例,就是帮你撬开这个黑盒的第一道缝。我们…

WorkBody:微信公众号自动化发布工具部署与实战指南

WorkBody:微信公众号自动化发布工具部署与实战指南

2026/8/6 2:50:58

如果你正在运营微信公众号,每天为选题、写稿、排版、发布而头疼,那么今天这个项目值得你花5分钟了解一下。WorkBody 是一个专注于微信公众号内容自动化的开源工具,它试图解决公众号运营中最耗时的两个环节:内容创作和发布。简单来…

SPC 新版培训实战指南:从理论到产线落地的全流程解析

SPC 新版培训实战指南:从理论到产线落地的全流程解析

2026/8/6 4:01:02

在汽车零部件生产线上,最让人头疼的往往不是偶尔出现的不良品,而是那些“明明设备参数没变,产品尺寸却忽大忽小”的诡异波动。很多质量工程师都有过这样的经历:拿着卡尺测了一堆数据,算出个 Cp 值看着挺漂亮&#xff0…

C# .NET Excel数据导入实战:EPPlus读取与DataTable、数据库批量写入

C# .NET Excel数据导入实战:EPPlus读取与DataTable、数据库批量写入

2026/8/6 4:01:02

1. 项目缘起:为什么我们总在和Excel数据打交道?如果你是一名C# .NET开发者,无论是做企业内部的业务系统、数据中台,还是开发一些数据处理工具,有一个场景你大概率逃不掉:从Excel文件里读取数据,…

AI智能体与Token成本:流量2.0时代的范式革命与实战指南

AI智能体与Token成本:流量2.0时代的范式革命与实战指南

2026/8/6 4:01:02

1. 流量2.0时代:从“眼球”到“智能”的范式革命如果你最近还在琢磨怎么搞流量、做增长,但脑子里想的还是SEO、信息流投放、短视频矩阵这些“老黄历”,那可能已经有点跟不上趟了。我干了十几年互联网,从PC时代的站长、移动互联网的…

2026年AI智能体开发实战:从模型选型到生产级应用部署

2026年AI智能体开发实战:从模型选型到生产级应用部署

2026/8/6 4:01:02

1. 从“龙虾”到登顶:一场静默的AI范式转移 如果你在2026年3月的某个深夜,打开任何一个科技社区或社交媒体,大概率会被一只“龙虾”刷屏。这不是什么新的美食风潮,而是一个代号为“Lobster”的智能体,它以一种近乎戏谑…

WPS Office(64 位)

WPS Office(64 位)

2026/8/6 4:01:01

链接:https://pan.quark.cn/s/921f73d33748WPS Office X64 是一款功能强大的办公软件,该软件不仅内置文字、表格、演示、PDF 处理等办公功能,除了常见的文档格式,还推出了智能文档、智能表格、智能表单等三种智能化操作。现已更新…

VMware虚拟机磁盘挂载:从原理到实战的Linux存储管理指南

VMware虚拟机磁盘挂载:从原理到实战的Linux存储管理指南

2026/8/6 3:51:01

1. 项目概述:为什么虚拟机磁盘挂载是运维的必修课在虚拟化环境里折腾,尤其是用 VMware 跑 Linux 虚拟机,磁盘扩容和挂载几乎是绕不开的日常操作。你可能遇到过这种情况:线上服务跑得好好的,突然日志就报“No space lef…

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

2026/8/4 15:23:37

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经从网易云音乐下载了心爱的歌曲&am…

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

2026/8/5 6:02:27

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比工程导读:本文深入讨论 分布式配置中心选型实战:Nacos与Consul在创业场景下的对比 在生产工程实践中的核心落地方案。基于 分布式架构与微服务设计 视角,剖析实际痛点、架…

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

2026/8/5 8:19:55

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案 【免费下载链接】MoneyPrinterPlus AI一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上,赚钱从来没有这么容易过! 支持本地语音模型chatTTS,fasterwhisper,…

Unity相机抖动插件Camera-Shake集成与应用实战指南

Unity相机抖动插件Camera-Shake集成与应用实战指南

2026/8/6 0:00:51

1. 项目概述与核心价值最近在做一个动作游戏,需要给主角的重击和爆炸场景加点料,让打击感更足。我第一时间就想到了给相机加个抖动效果,毕竟这是提升玩家沉浸感最简单直接的手段之一。自己手写一个也不是不行,但时间成本高&#x…

Cocos Creator 3.7微信小游戏开发:从架构设计到提审上线的全流程实战指南

Cocos Creator 3.7微信小游戏开发:从架构设计到提审上线的全流程实战指南

2026/8/6 0:00:51

1. 项目概述:为什么需要一份3.7版本的专属适配指南?如果你是一位使用Cocos Creator开发微信小游戏的开发者,并且项目正运行在3.7版本上,那么你很可能已经感受到了那份“甜蜜的烦恼”。一方面,Cocos Creator 3.7是一个功…

AI编程实战:从Prompt工程到工具链集成,打造高效开发工作流

AI编程实战:从Prompt工程到工具链集成,打造高效开发工作流

2026/8/6 0:00:51

1. 项目概述:一次开源AI编程课程的深度重构 最近,我把自己的开源AI编程课程《Claude Code》做了一次从里到外的大更新。如果你对利用Claude、Codex这类大模型来辅助编程感兴趣,或者正在寻找一个能跟上最新AI编码工具迭代节奏的学习路径&#…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/4 13:34:51

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/4 14:25:14

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/4 15:11:03

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…