如何实现手写单向链表
一. 问题展现
通常我们在大多数的面试中,遇到关于集合的问题都是比较多的。一般情况下,许多面试官通常都会问我们关于Set集合和Map集合的相关知识点,并对此进行重重陷阱的布置,此时很多面试者往往就很容易被带到面试官挖好的陷阱里。另外就是双向链表,也是面试频率相对较多且较复杂的问题,甚至还有一些面试官在问完双向链表的相关知识点后,还会变态地叫我们手写出一个单向链表,以此来考察面试者对链表的掌握情况。所以今天就带大家手写一个单向链表,让我们一起理清单向链表的实现思路。
二. 内容详解
1.实现思路
如果我们想要实现一个单向链表,就要理解单向链表是如何实现的,这里我们先来一个思维导图,脑海中先有一个实现思路。
根据上图中的有效信息,我们可以大致了解:如果我们想要创建一个单向链表,内部所含变量包含有节点类,而节点内要有值,以及下一个节点的值,并可以持续添加,无限循环地向下递增。
此时我们需要再考虑一个问题,链表既然有增加操作,那就同样需要有减少操作,可是我们此时该如何去进行正确地删减节点呢?其实我们可以向ArrayList一样去设置一个类似指针的东西,每添加一个节点就进行加一操作,每删除一次就进行减一操作。
2.实现代码
源码如下:
这时候,可能就会有小伙伴疑问,这不就是一个类吗,这样理解也并非错误!其实链表及其他的集合都是一个类,只是这个类赋予了各个集合不一样的功能。
3.添加功能
在我们最开始接触Java时,我们听到的最多的内容,就是通过Java语言来实现数据的CRUD(增删改查),而作为拥有存储功能的单向链表来说,一样可以赋予其增删改查的功能,接下来就是相关源码。
关于添加其实很好理解,因为有关联关系直接绑定关系即可。
4.删除功能
删除数据的功能实现如下:
删除功能的实现,波哥认为是比较复杂的。因为有了绑定关系,就需要判断给定的下标是在开头还是结尾,或者是在中间。如果是在开头的话,那么就不会涉及当前节点的上一个节点,只需要把下一个节点替到前面来即可;如果是结尾,则需将删除节点中上一个节点的下一个关联节点修改为null即可;而如果是中间节点,则需要将当前节点的下一个节点关联到当前节点的下一个节点即可。
5.修改功能
修改数据的功能实现如下:
修改时要确定传入的下标值与当前链表的size比对。其实细心的小伙伴可以观察到,修改功能其实和删除功能有很大的相似之处,无非就是将对应的下标遍历到,然后在其对应位置将数据值替换即可。
6.查询功能
查询数据的功能实现如下:
查询数据其实也是大同小异的,就是将节点遍历,将数据以带缓存区的字符串进行拼接,这里其实也可以更换为数组来代替也是可以的,根据需求来设定即可。
7.执行结果
接下来,就请小伙伴和波哥一起来看看最终的输出结果吧。
以上就是对单向链表的手动实现,相信各位在看完本文的详解后,许多小伙伴对于单向链表的了解也能更为精进啦。
相关推荐HOT
更多>>如何添加Java环境变量?
要添加Java环境变量,可以按照以下步骤:并安装Java开发工具包(JDK)、找到Java安装路径、设置JAVA_HOME环境变量、添加Java可执行文件路径到PATH...详情>>
2023-05-04 11:00:56从零开始学Java之String字符串的编码
对很多小白来说,可能不明白什么是字符编码,也不知道为什么要有字符编码,所以先来给大家简要地介绍一下字符编码。详情>>
2023-05-04 10:21:02新手速来!几步带你掌握MyBatis Plus
Mybatis-Plus(简称MP)是一款Mybatis的增强工具,它是在Mybatis的基础上实现的简化开发工具。Mybatis-Plus给我们提供了开箱即用的CRUD操作、自动...详情>>
2023-04-28 10:57:09学习java需要什么基础?基础知识有哪些?
网络编程:了解基本的网络编程概念和协议,熟悉 Java 网络编程 API。建议在学习 Java 之前,先学习一些基础的编程语言,如 C 或 Python 等,这...详情>>
2023-04-28 10:41:14