当前位置: 首页 > news >正文

LinkedList与链表

目录

1、链表

2、实现自己的链表 (不带头结点)

2.1、遍历链表

2.2、求链表长度

2.3、判断链表是否包含关键字

2.4、插入节点

2.5、任意位置插入一个节点

2.6、删除一个节点

2.7、删除所有值为key的节点

2.8、清空所有节点


1、链表

链表是一种物理结构上不连续的存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的;类似火车车厢,链表是由一个一个的节点组成的

实际中链表的结构非常多样,以下情况组合起来就有8种链表结构:

1. 单向或者双向

2. 带头或者不带头

3. 循环或者非循环

2、实现自己的链表 (不带头结点)

创建一个 IList 接口,其中方法如下:

再创建一个 MySingleList 类,实现 IList 接口并重写其中的所有方法:

在 MySingleList 类中创建一个内部类 ListNode,表示节点,节点中包含数据域和next域;这里使用静态内部类,因为静态内部类对象不需要通过外部类对象的引用获得

2.1、遍历链表

display方法:

1. 怎么从一个节点走到下一个节点的 ?

head = head.next;

2. 怎么判断所有的节点都遍历完了 ?

head = null;

但是这样写会导致 head 变为 null ,所以让 cur 代替 head,避免 head 变为 null

2.2、求链表长度

size方法:

遍历每一个节点

2.3、判断链表是否包含关键字

contains方法:

2.4、插入节点

头插法:addFirst方法

1. 实例化一个节点

2. 改变插入节点的next

3. 改变head

也可以直接这样写

^

尾插法:指的是讲待插入的节点存放在链表的最后一个位置

addLast方法:

1. 实例化一个节点

2. 找到最后一个节点cur

3. cur.next = node;

分析:

  • 头插法的时间复杂度O(1)
  • 尾插法的时间复杂度O(N)

根据上述代码看出,链表的插入只需要改变指向就可以了!

结论:

1. 如果想让 cur 停在最后一个节点的位置 -> cur.next!= null

2. 如果想把整个链表的每个节点都遍历完 -> cur!= null

2.5、任意位置插入一个节点

addIndex方法:

1. 让cur走index-1步

2. node.next = cur.next;

    cur.next = node;

在插入一个节点的时候,一定要先绑定后面的节点

2.6、删除一个节点

2.7、删除所有值为key的节点

2.8、清空所有节点

相关文章:

  • (学习总结26)Linux工具:make/Makefile 自动化构建、Git 版本控制器 和 gdb/cgdb 调试器
  • 鸿蒙-状态管理V2其他方法
  • 评高级工程师职称的条件-三大硬性要求
  • 【时时三省】(C语言基础)数据类型
  • Linux通过设备名称如何定位故障硬盘
  • 应用的负载均衡
  • windbg-记一次应用程序崩溃的定位
  • 【综合项目】api系统——基于Node.js、express、mysql等技术
  • 穷举vs暴搜vs深搜vs回溯vs剪枝(典型算法思想)—— OJ例题算法解析思路
  • 【java进阶】java多态深入探讨
  • C# | GDI+图像测距辅助线的实现思路
  • 企业知识库搭建:14款开源与免费系统选择
  • OpenAI开放Deep Research权限,AI智能体大战升级,DeepSeek与Claude迎来新对决
  • 【质量管理】怎么评估职能部门当前质量管理成熟度
  • Innodb MVCC实现原理
  • 【Java学习】Object类与接口
  • qt-C++笔记之QtCreator新建项目即Create Project所提供模板的逐个尝试
  • deepseek 本地化部署(小白也可部署)
  • SQL------搭建sql靶场和打开sql靶场及报错解决
  • 清华deepseek文档下载地址,DeepSeek:如何赋能职场应(附下载包)64页全面详细介绍(二)
  • 李在明回应韩国大法院判决:与自己所想截然不同,将顺从民意
  • 滨江集团:一季度营收225.07亿元,净利润9.75亿元
  • 习近平主持召开部分省区市“十五五”时期经济社会发展座谈会
  • 铁路迎来节前出行高峰,今日全国铁路预计发送旅客1870万人次
  • 屠呦呦当选美国国家科学院外籍院士
  • 华夏银行一季度营收降逾17%、净利降逾14%,公允价值变动损失逾24亿