课时141:链表(数据删除)

简介: 1.数据删除的定义2.在 ILink 接口里面追加新的删除方法3.后续节点判断4.完善 LinkImpl 子类中的 remove() 方法

课时141:链表(数据删除)

摘要:

1. 数据删除的定义

2.  ILink 接口里面追加新的删除方法

3. 后续节点判断

4. 完善 LinkImpl 子类中的 remove() 方法

 

01.什么是数据删除

 

数据的删除指的是可以从集合里面,除掉指定的一个数据内容,此时传递的是数据内容,那么如果要实现这种删除操作,依然需要对象比较的支持

 

02.数据删除

 

2.1集合数据的删除两种情况:


1要删除的是根节点数据(  LinkImpl 与根结点有关,所以这个判断由根节点完成 )假设下图是存的数据,是由根节点指向第一个数据节点,这是 Root 作用。Root 指向第一个节点只是引用,可以让 Root 指向第二个数据节点,在这里实现了引用修改。


第一个数据没有指向,就表示该节点已经空出去了,便可以实现删除,这是第一种删除在根节点的情况下,不一定节点都在根节点。

image.png

2要删除的不是根节点数据(由 Node 类负责): 在此根节点此前已经判断过,如果要再次判断就需从根节点下一个开始判断,如果现在要删除,那么过程很简单,当前节点的上一个.next 指向当前的.next 就空出节点了,这样便实现删除了。

image.png

 

2.2 ILink 接口里面追加新的删除方法

public void remove(Ee):// 数据删除

 

2.3在 LinkImpl 子类里面实现根节点的判断

Public void remove (E data)  {
If  ( this.contains (data) )  {  // 判断数据是否存在
If  (this.root.data.equals(data) ) { // 根节点为要删除节点
this.root = this.root.next ;// 根的下一个节点
        }
this.count -- ;
}
}

代码执行结果:

image.png

 

03.后续节点判断

 

3.1节点判断


如果现在更节点并不是要删除的节点,那么就需要进行后续节点判断,但是请一定要记住,此时更节点已经判断完成了,那么在判断,应该从根节点的下一个开始判断,在 Node 类中追加删除处理。

public void removeNode(Nde previous,E data) {
If ( this.data.equalsdata ) )  {
previous.nexthis.next  ;  //空出当前节点
} else {
{ if ( this.next !=null )  {  // 有后续节点
this.next.relmoveNode(this,data) ;//向后继续删除
       }
}
}

 

3.2完善 LinkImpl 子类中的 remove()方法

If  (this.contains(data))mals(data) )  {  // 判断数据是否存在
If  (this.root.data.equals (date) )  {  // 根节点为要删除节点
this.root = this.root.next ; // 根的下一个节点
}  else  {  // 交由Node类负责删除
this.root.next.removeNode(this.root,data) ;
      }
this.count -- ;
}
}

代码执行结果:

image.png

删除逻辑依靠的就是引用的改变处理完成的。

 

相关文章
|
2月前
|
存储 监控 算法
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
在数字化办公时代,公司监控上网软件成为企业管理网络资源和保障信息安全的关键工具。本文深入剖析C++中的链表数据结构及其在该软件中的应用。链表通过节点存储网络访问记录,具备高效插入、删除操作及节省内存的优势,助力企业实时追踪员工上网行为,提升运营效率并降低安全风险。示例代码展示了如何用C++实现链表记录上网行为,并模拟发送至服务器。链表为公司监控上网软件提供了灵活高效的数据管理方式,但实际开发还需考虑安全性、隐私保护等多方面因素。
41 0
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
|
1月前
课时142:链表(清空链表)
在某些场景下,我们需要一次性清空链表中的所有数据。这个时候就可以通过根元素处理进行控制。只要 Root 设置为空,则后续的节点都不存在。
|
1月前
|
存储
课时140:链表(判断数据是否存在)
在一个集合中往往会保存大量的数据,有时候会需要判断数据是否会存在。我们将使用对象比较的方式( Equals 方法)来实现这个功能。
|
1月前
|
索引
课时139:链表(修改指定索引数据)
现在已经可以通过索引来获取链表中的指定数据,既然可以获取数据,那么也就可以实现修改指定索引位置的数据这种常见功能。 本节将介绍如何实现这个功能。
|
1月前
|
存储 索引
课时133:链表实现简介
链表的本质是一种动态的对象数组,它可以存储任意数量的对象。简而言之,我们可以将其视为一种对象数组。 1. 链表简介 2. 链表的实现原理 3. 代码实现中的问题与解决方案
|
10月前
|
存储 缓存
【海贼王的数据航海】链表—双向链表
【海贼王的数据航海】链表—双向链表
45 0
|
10月前
|
存储
【海贼王的数据航海】链表—单链表
【海贼王的数据航海】链表—单链表
61 0
|
11月前
|
C++ Python Java
Python每日一练(20230424) 滑动窗口最大值、栈实现队列、直线上最多的点数
Python每日一练(20230424) 滑动窗口最大值、栈实现队列、直线上最多的点数
622 0
Python每日一练(20230424) 滑动窗口最大值、栈实现队列、直线上最多的点数
|
11月前
|
存储 缓存 算法
【编织时空四:探究顺序表与链表的数据之旅】(下)
【编织时空四:探究顺序表与链表的数据之旅】
|
10月前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表