如何手写一个单向链表?看这里

news2024/11/23 2:10:46

一. 问题展现

通常我们在大多数的面试中,遇到关于集合的问题都是比较多的。一般情况下,许多面试官通常都会问我们关于Set集合和Map集合的相关知识点,并对此进行重重陷阱的布置,此时很多面试者往往就很容易被带到面试官挖好的陷阱里。另外就是双向链表,也是面试频率相对较多且较复杂的问题,甚至还有一些面试官在问完双向链表的相关知识点后,还会变态地叫我们手写出一个单向链表,以此来考察面试者对链表的掌握情况。所以壹哥今天就带大家手写一个单向链表,让我们一起理清单向链表的实现思路。

二. 内容详解

1. 实现思路

如果我们想要实现一个单向链表,就要理解单向链表是如何实现的,这里我们先来一个思维导图,脑海中先有一个实现思路。

根据上图中的有效信息,我们可以大致了解:如果我们想要创建一个单向链表,内部所含变量包含有节点类,而节点内要有值,以及下一个节点的值,并可以持续添加,无限循环地向下递增。

此时我们需要再考虑一个问题,链表既然有增加操作,那就同样需要有减少操作,可是我们此时该如何去进行正确地删减节点呢?其实我们可以向ArrayList一样去设置一个类似指针的东西,每添加一个节点就进行加一操作,每删除一次就进行减一操作。

2. 实现代码

源码如下:

这时候,可能就会有小伙伴疑问,这不就是一个类吗,这样理解也并非错误!其实链表及其他的集合都是一个类,只是这个类赋予了各个集合不一样的功能。

3. 添加功能

在我们最开始接触Java时,我们听到的最多的内容,就是通过Java语言来实现数据的CRUD(增删改查),而作为拥有存储功能的单向链表来说,一样可以赋予其增删改查的功能,接下来就是相关源码。

关于添加其实很好理解,因为有关联关系直接绑定关系即可。

4. 删除功能

删除数据的功能实现如下:

删除功能的实现,壹哥认为是比较复杂的。因为有了绑定关系,就需要判断给定的下标是在开头还是结尾,或者是在中间。如果是在开头的话,那么就不会涉及当前节点的上一个节点,只需要把下一个节点替到前面来即可;如果是结尾,则需将删除节点中上一个节点的下一个关联节点修改为null即可;而如果是中间节点,则需要将当前节点的下一个节点关联到当前节点的下一个节点即可。

5. 修改功能

修改数据的功能实现如下:

修改时要确定传入的下标值与当前链表的size比对。其实细心的小伙伴可以观察到,修改功能其实和删除功能有很大的相似之处,无非就是将对应的下标遍历到,然后在其对应位置将数据值替换即可。

6. 查询功能

查询数据的功能实现如下:

查询数据其实也是大同小异的,就是将节点遍历,将数据以带缓存区的字符串进行拼接,这里其实也可以更换为数组来代替也是可以的,根据需求来设定即可。

7. 执行结果

接下来,就请小伙伴和壹哥一起来看看最终的输出结果吧。

以上就是壹哥对单向链表的手动实现,相信各位在看完本文的详解后,许多小伙伴对于单向链表的了解也能更为精进啦。如果大家想要获取更多关于单向链表等内容,可以在评论区给壹哥留言哦!!!

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

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

相关文章

netstat命令详解

netstat命令详情一、前言二、netstat查看端口命令三、显示每个协议的统计信息四、显示核心路由信息五、netstat的其他参数一、前言 个人主页: ζ小菜鸡大家好我是ζ小菜鸡,小伙伴们,让我们一起来学习netstat命令使用,netstat命令是一个监控TC…

echarts疑难杂症

echarts疑难杂症1.调整柱状图、饼图的大小2.嵌套饼图且颜色保持一致3.并排展示饼图且中间展示文字4.折线图(柱状图)双y轴5.使用echarts56.图形不展示的问题1.调整柱状图、饼图的大小 //柱状图主要根据grid属性中的top/bottom/left/right属性调整大小 le…

【毕业设计】机器视觉行人口罩佩戴检测系统 - python 深度学习

文章目录0 前言1 简介2 效果展示3 实现方法3.1 模型介绍3.2 获取数据集3.3 数据集获取4 最后0 前言 🔥 Hi,大家好,这里是丹成学长的毕设系列文章! 🔥 对毕设有任何疑问都可以问学长哦! 这两年开始,各个学…

164页5万字轨道交通BIM方案建议书

目录 1、 概况 1.1. BIM国内外现状 1.1.1. 国外BIM现状 1.1.2. 国内BIM现状 1.2. BIM在轨道交通工程领域的发展概况 1.3. 中铁二院BIM发展总体思路的建议 2、 解决方案总体架构 2.1. 解决方案应具备的要素 2.2. 解决方案整体架构 2.3匹配度分析 3、 设计阶段解决方案…

数据库的基本操作(5)

先回顾一下在上一篇中的内容: 聚合查询:行和行之间的数据的加工。 聚合函数:count,avg,sum...... group..by...进行分组,将指定列的值进行分组,将相同的记录合并到一个组中。每个组还可以进行…

Golang入门笔记(10)—— 包

使用包的原因: 1.不可能把所有的不同业务功能的函数都放在一个源文件中,这样不便于管理。通常的做法是:我们会把具有相同一些功能和业务的维度的函数,分门别类的放在不同的源文件中。 2.不同的包名,可以解决两个函数…

【SQL 中级语法 3】三值逻辑和NULL

普通语言里的布尔型只有true和false两个值,这种逻辑体系被称为二值逻辑。而SQL语言里,除此之外还有第三个值unknown,因此这种逻辑体系被称为三值逻辑(three-valued logic)。 为什么SQL语言采用了三值逻辑呢&#xff1…

java项目-第139期ssm博客系统-ssm毕业设计_计算机毕业设计

java项目-第139期ssm博客系统-ssm毕业设计_计算机毕业设计 【源码请到资源专栏下载】 今天分享的项目是《ssm博客系统》 该项目分为前台和后台2个部分。 前台不需要登录,游客都可以访问,并发表评论 管理员登录后可以进行文章的发表,分类&…

德鲁克《卓有成效的管理者》学习读书-总结

有幸学习了管理大师德鲁克先生的《卓有成效的管理者》,帮助学习者理清了在理论和实践之间建立桥梁,使其生根落地,开花结果;管理不是常识,管理是个实践学科,要不断温习,不断与领导同事联接&#…

人肠道宏病毒与其宿主和环境因素的关联分析

近期《Nature Communications》期刊上(IF17.694)发表的“Extensive gut virome variation and its associations with host and environmental factors in a population-level cohort”研究论文中,对从4198个个体的肠道宏基因组中获得的人类肠道病毒进行分析&#x…

PCB设计时如何选择合适的叠层方案

大家在画多层PCB的时候都要进行层叠的设置,其中层数越多的板子层叠方案也越多,很多人对多层PCB的层叠不够了解,通常一个好的叠层方案可以降低板子产生的干扰,我们的层叠结构是影响PCB板EMC性能的重要因素,下面我们以四层板和六层板…

刨根问底 Redis, 面试过程真好使

充满寒气的互联网如何在面试中脱颖而出,平时积累很重要,八股文更不能少!下面带来的这篇 Redis 问答希望能够在你的 offer 上增添一把🔥。 在 Web 应用发展的初期阶段,一个网站的访问量本身就不是很高,直接使…

SRM供应商关系管理系统解决方案

SRM供应商关系管理系统解决方案供应商关系管理(SRM)软件的采购指南 什么是供应商关系管理(SRM)软件? 供应商关系管理(SRM)软件是一个通讯解决方案制造商、分销商和零售商的供应链。供应商管理用于将所有有关组织的供应商通讯和颜色编码索引卡片。现在SRM管理的数字由一个国家…

OOM内存溢出分析

Mat内存溢出dump文件分析工具http://www.eclipse.org/mat/downloads.php 模拟OOM Java 程序 package org.cj.oom;import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit;/*** 创建内存分析* java启动参数指定内存 -Xms1m -Xmx1m* author…

没有上司的舞会 - 树形DP

目录题目描述前言C代码题目描述 Ural 大学有 NNN 名职员,编号为 1∼N1∼N1∼N。 他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司。 每个职员有一个快乐指数,用整数 HiH_iHi​ 给出,其中 1≤i≤N1≤i≤N1≤i≤N。…

ElasticSearch分布式搜索引擎安装保姆级教程

ElasticSearch分布式搜索引擎安装教程 一.Hr:ElasticSearch是什么? 答:Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的&#…

后端API接口性能优化的10种方案,真有用!

后端API接口性能优化的10种方案,真有用! 批量思想:批量操作数据库 优化前: //for循环单笔入库 for(TransDetail detail:transDetailList){insert(detail); } 优化后: batchInsert(transDetailList); 打个比喻&…

docker-compose的安装与卸载

compose项目是docker官方的开源项目,负责实现对Docker容器的快速编排 定位 定位是定义与运行多个docker容器的应用,同时可以对多个容器进行编排Compose 中有两个重要的概念: 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的…

电压跌落检测

1.前言 根据国际上较为权威的 IEEE 制定的标准可知,电压跌落是指电力系统中某点工频电压方均根值突然降低至 0.1p.u. ~ 0.9p.u.,并在短暂持续10ms~1min 后恢复正常的现象。在对电压跌落进行检测时一般都需要检测起止时刻、相位跳变、跌落深度这三个特征…

小啊呜产品读书笔记001:《邱岳的产品手记-03》第04+05讲 如何当好AI时代的产品经理 06讲 产品案例分析·TheGuardian的文本之美

小啊呜产品读书笔记001:《邱岳的产品手记-03》第0405讲 如何当好AI时代的产品经理 & 06讲 产品案例分析TheGuardian的文本之美一、今日阅读计划二、泛读&知识摘录1、04讲 如何当好AI时代的产品经理?(学习篇)2、05讲 如何当…