课时139:链表(修改指定索引数据)

简介: 现在已经可以通过索引来获取链表中的指定数据,既然可以获取数据,那么也就可以实现修改指定索引位置的数据这种常见功能。 本节将介绍如何实现这个功能。

课时139:链表(修改指定索引数据)

摘要:现在已经可以通过索引来获取链表中的指定数据,既然可以获取数据,那么也就可以实现修改指定索引位置的数据这种常见功能。

本节将介绍如何实现这个功能。

 

1. 在 ILink接口中添加 set(int index, E data)方法

interface ILink<E> {//设置范型避免安全隐患
    public  void  add(E e);//增加数据的个数
    public int size();//获取数据的个数
    public Object [] toArray();
     public boolean isEmpty();
    public E get(int index); // 根据索引获取数据
    public  void set(int index, E data); // 根据索引修改数据

 

2.在Node类中添加 setNode(int index, E data)方法(提供数据修改的技术支持)

 

public void setNode(int index, E data) {
    if (LinkImpl.this.foot++ == index) {
        this.data = data; //修改数据
    } else {
          this.next.setNode(index, data);
        }
    }

 

3. 在LinkImpl子类实现方法覆写,实现setNode(int index, E data) 方法

public void set(int index, E data) {
        if (index >= this.count) {
        return  ; // 索引超出范围,不做任何处理,方法结束
        }
        this.foot = 0;
        this.root.setNode(index, data);//修改数据
        }

 

4. 测试代码

public class LinkDemo {
    public static void main(String[] args) {
        ILink<String> all = new LinkImpl<String>();
        System.out.println("【增加之前】数据个数:" + all.size()+"、是否为空集合:"+all.isEmpty());
        all.add("Hello");
        all.add("World");
        all.add("MLDN");
        all.add(1,"世界");
        System.out.println("【增加之后】数据个数:" +  all.size()+"、是否为空集合:"+all.isEmpty());
        System.out.println("------数据获取的分割线-------");
        System.out.println(all.get(0));
        System.out.println(all.get(1));
        System.out.println(all.get(4)); // 索引超出范围
    }
}

运行结果如下:

image.png

成功实现数据的修改

 

与根据索引获取数据类似,根据索引修改数据的时间复杂度也是 O(n),其中 n 是链表的长度。 这是因为我们需要从头开始遍历链表,直到找到目标索引对应的节点。

 

相关文章
|
2月前
|
存储 监控 算法
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
在数字化办公时代,公司监控上网软件成为企业管理网络资源和保障信息安全的关键工具。本文深入剖析C++中的链表数据结构及其在该软件中的应用。链表通过节点存储网络访问记录,具备高效插入、删除操作及节省内存的优势,助力企业实时追踪员工上网行为,提升运营效率并降低安全风险。示例代码展示了如何用C++实现链表记录上网行为,并模拟发送至服务器。链表为公司监控上网软件提供了灵活高效的数据管理方式,但实际开发还需考虑安全性、隐私保护等多方面因素。
41 0
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
|
1月前
课时142:链表(清空链表)
在某些场景下,我们需要一次性清空链表中的所有数据。这个时候就可以通过根元素处理进行控制。只要 Root 设置为空,则后续的节点都不存在。
|
1月前
课时141:链表(数据删除)
1.数据删除的定义 2.在 ILink 接口里面追加新的删除方法 3.后续节点判断 4.完善 LinkImpl 子类中的 remove() 方法
|
1月前
|
存储
课时140:链表(判断数据是否存在)
在一个集合中往往会保存大量的数据,有时候会需要判断数据是否会存在。我们将使用对象比较的方式( Equals 方法)来实现这个功能。
|
1月前
|
存储 索引
课时133:链表实现简介
链表的本质是一种动态的对象数组,它可以存储任意数量的对象。简而言之,我们可以将其视为一种对象数组。 1. 链表简介 2. 链表的实现原理 3. 代码实现中的问题与解决方案
|
10月前
|
存储 算法 C语言
【链表专题】深入探索链表:文章索引与知识架构(链表的概念、实现、应用、经典例题大合集)
【链表专题】深入探索链表:文章索引与知识架构(链表的概念、实现、应用、经典例题大合集)
|
10月前
|
存储 缓存
【海贼王的数据航海】链表—双向链表
【海贼王的数据航海】链表—双向链表
45 0
|
10月前
|
存储
【海贼王的数据航海】链表—单链表
【海贼王的数据航海】链表—单链表
61 0
|
11月前
|
Python Linux Ubuntu
Linux系统部署Python语言开发运行环境
Linux系统部署Python语言开发运行环境
312 0
Linux系统部署Python语言开发运行环境
|
10月前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
下一篇
oss创建bucket