千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:重庆千锋IT培训  >  技术干货  >  如何实现手写单向链表

如何实现手写单向链表

来源:千锋教育
发布人:lxl
时间: 2023-03-20 15:04:25

  一. 问题展现

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

  二. 内容详解

  1.实现思路

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

如何实现手写单向链表

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

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

  2.实现代码

  源码如下:

如何实现手写单向链表

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

  3.添加功能

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

如何实现手写单向链表

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

  4.删除功能

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

如何实现手写单向链表

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

  5.修改功能

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

如何实现手写单向链表

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

  6.查询功能

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

如何实现手写单向链表

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

  7.执行结果

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

如何实现手写单向链表

  以上就是对单向链表的手动实现,相信各位在看完本文的详解后,许多小伙伴对于单向链表的了解也能更为精进啦。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

java的输入语句—— Scanner类

2023-05-04

java数据库操作常识事务的四大特性

2023-05-04

DML数据操作之增加或删除数据

2023-05-04

最新文章NEW

socket是什么?有什么作用?

2023-05-04

Java常量定义是什么

2023-04-28

一分钟带你学多线程

2023-04-28

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>