首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

基于Java的单链表的删除

在实现单链表的过程中,我发现了一个问题,就是之前的实现无法对单链表的节点进行修改,原因是因为我将Node内部类的访问权限写成了private,那么就导致我无法访问Node节点,只能访问head头节点,而我这种实现方式,不是单链表,而是类似于队列的一种形式(只允许在两端进行操作),所以需要对前面的Node节点类进行修改,但这个还不着急。

今天要讲的是单链表的删除和插入(关于Node节点的访问权限问题,现在还不着急修改),删除单链表的节点,其实就是将此节点的next值赋给上一个节点的next。

上一篇的单链表的结构图不是特别严谨,所以特地推出新的单链表的结构图。如图所示:

其中节点名就是Node的变量名,数据区域指Node节点存放的数据,节点区域指Node节点存放的下一个节点是谁。

删除节点

找到需要删除的节点。(后面介绍,现在假设已经找到)

定义:

删除的节点称为node

被删除节点的上一个节点称之为lastNode

被删除的节点的下一个节点称为nextNode

操作:(图中lastNode的等号我忘记画了,各位小伙伴将就着看)

首先定义一个节点t用于记录node节点(直接将lastNode节点的next的值赋给t节点)

其次将lastNode的next值变为nextNode的值,最后在使得t的next为null。

其实最后一步可以省略,但是让其为null可以使得垃圾回收机制将其进行回收。

删除的大致流程都已经知晓,那么现在有几个问题,如何找到需要删除的数据?万一删除的数据是头结点怎么办?万一单链表就是空的怎么办?如何判断删除数据成功?如何结束删除?

寻找那个将要被抛弃的数据(真可怜)

进行遍历,找到需要删除的节点。

删除的数据是头结点怎么办?

进行判断,头结点的数据就是需要抛弃的数据,那就移动头结点。

链表为空,还删个锤子,直接返回false,删除失败。

判断数据是否删除成功,可以定义一个flag标志

当最后一个节点指向null节点时就结束循环。

代码借鉴:(可能我这个代码并不是最优化的,但是基本操作都是一样的,各位可以根据之前的删除节点的操作图,编写自己的代码实现。)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190811A00VEP00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券