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

浅谈线性表——链表

文章目录

  • 一、ArrayList的缺陷
  • 二、什么是链表?
  • 三、自我实现一个单向不带头非循环结构的链表
    • 3.1、实现代码
    • 3.2、代码解析
  • 四、自我实现一个双向不带头非循环结构的链表
    • 4.1、实现代码

一、ArrayList的缺陷

前面学习了顺序表,顺序表在知道下标时可以快速的查找元素,但是:
a、顺序表尾插、尾删的时间复杂度为O(1),但是中间/头部的插入删除时间复杂度为O(N)
b、扩容时需要申请新空间,拷贝数据,释放旧空间,会有不小的消耗
c、 扩容一般是呈2倍的增长,势必会有一定的空间浪费

因此引入了一种新的数据结构——链表,能够解决上述的问题。

二、什么是链表?

链表(LinkedList):将数据以链式形式进行存储。链表中的每一个元素称为节点(结点),节点中由2部分组成,一部分存放数据元素,一部分存放下一个数据元素的地址。

链表逻辑上是连续的,物理上不一定连续,是因为链表的连续性是通过地址连接起来,并不像顺序表那样是一段物理地址连续的存储单元依次存储数据元素。
在这里插入图片描述

在这里插入图片描述

三、自我实现一个单向不带头非循环结构的链表

3.1、实现代码

代码链接

3.2、代码解析

(1)、createMyLinkedList()方法
在这里插入图片描述
(2)、display()方法(遍历链表)
在这里插入图片描述
在这里插入图片描述
(3)、头插法:public void addFirst(int data)
时间、空间复杂度皆O(1)
在这里插入图片描述
(4)、尾插法:public void addLast(int data)
时间复杂度O(n)、空间复杂度O(1)
在这里插入图片描述
(5)、 随机插入:public void addIndex(int index,int data)
时间复杂度O(n)、空间复杂度O(1)
在链表的任意位置插入:
(6)、删除第一个出现的指定key节点: public void remove(int key)
时间复杂度O(n)、空间复杂度O(1)在这里插入图片描述
(7)、删除链表中所有等于val值的节点:public void removeAllKey(int key)
在这里插入图片描述

四、自我实现一个双向不带头非循环结构的链表

在这里插入图片描述

4.1、实现代码

代码链接

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • AI编程简介
  • 【第69课】Java安全JWT攻防Swagger自动化算法签名密匙Druid未授权
  • java-Mybatis框架
  • MFC程序设计(一) MFC框架
  • 23种设计模式详细知识点(软件设计师)
  • 【工控】线扫相机小结
  • Linux编程:使用 CSV 与 UnQLite 进行数据存储的比较分析
  • Java中‘==’ 和 equals()的区别
  • GeoScene Pro教程(001):软件功能产品介绍
  • Win11配置Pytorch深度学习环境(GPU版本)
  • 鸿蒙HarmonyOS实战:IPC与RPC设备内进程通信
  • 【ROS2】launch启动文件:基础
  • pyyaml:Python 中的 YAML 处理大师
  • 【数学建模】TOPSIS法(优劣解距离法)
  • JimuReport 积木报表 v1.8.0 版本发布,开源可视化报表
  • [nginx文档翻译系列] 控制nginx
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • Angular 2 DI - IoC DI - 1
  • Bootstrap JS插件Alert源码分析
  • Docker: 容器互访的三种方式
  • input实现文字超出省略号功能
  • Java小白进阶笔记(3)-初级面向对象
  • JDK9: 集成 Jshell 和 Maven 项目.
  • JS专题之继承
  • node 版本过低
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • Vue UI框架库开发介绍
  • win10下安装mysql5.7
  • 初探 Vue 生命周期和钩子函数
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 从输入URL到页面加载发生了什么
  • 构建二叉树进行数值数组的去重及优化
  • 构建工具 - 收藏集 - 掘金
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 入门到放弃node系列之Hello Word篇
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • Prometheus VS InfluxDB
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • #### golang中【堆】的使用及底层 ####
  • #《AI中文版》V3 第 1 章 概述
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • $refs 、$nextTic、动态组件、name的使用
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (ibm)Java 语言的 XPath API
  • (poj1.2.1)1970(筛选法模拟)
  • (补充)IDEA项目结构
  • (南京观海微电子)——I3C协议介绍
  • (三分钟)速览传统边缘检测算子
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • ***原理与防范
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .gitignore文件设置了忽略但不生效