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

LinkedList的模拟实现(双向链表Java)

一:结构

LinkedList的底层是双向链表结构(链表后面介绍),由于链表没有将元素存储在连续的空间中,元素存储在单独的节点中,然后通过引用将节点连接起来了,因此在在任意位置插入或者删除元素时,不需要搬移元素,效率比较高。

1:LinkedList实现了List接口
2:LinkedList的底层使用了双向链表
3:  LinkedList没有实现RandomAccess接口,因此LinkedList不支持随机访问

4:  LinkedList的任意位置插入和删除元素时效率比较高,时间复杂度为O(1)
5:  LinkedList比较适合任意位置插入的场景

二:实现

2.1:addFirst(头插)

首先生成node对象,此时head节点的prev前一个节点为null,node的下一个节点为null,所以将此时head节点的prev指向node节点,将node节点的next节点指向head节点,再将head节点向前移,指向node,此时node节点就是头节点了。

2.2:addlast(尾插)

在链表最后插入node对象,此时last的next节点为null,在尾部插入了一个node,所以last.next=node,然后将node节点的prev节点指向last,在将last后置last=node,此时node节点就是最后一个节点。

2.3:addIndex(插入)

与单向链表不同,此时findIndex方法的返回值不需要返回要插入位置的前一个节点,而是直接返回要插入位置的节点。然后通过prev与next进行变换即可。

2.4: remove(删除指定节点)

2,5:removeAllKey(删除所有key) 

与单一删除相同,只不过remove删除一个后最后就return,只要不返回然cur继续遍历重复执行上述代码,直到cur==null,全部删除完毕。

三:6. ArrayList和LinkedList的区别 

http://www.dtcms.com/a/291568.html

相关文章:

  • JavaScript的引入方式和基础语法的快速入门与学习
  • 单表查询-分页提前获取数据
  • ni-app 对鸿蒙的支持现状
  • 【系统全面】Linux进程——基础知识介绍
  • 【智能协同云图库】智能协同云图库第二期:基于腾讯云 COS 对象存储—开发图片各功能模块
  • 从0开始的中后台管理系统
  • WebAPIs事件流与事件委托与其他事件
  • 关于JavaWeb的总结笔记
  • 【web 自动化】-6- 数据驱动DDT
  • 二叉树实现堆,咕咕咕
  • 【Windows】多标签显示文件夹
  • 【世纪龙科技】数字课程资源-新能源汽车概论
  • 《Linux 环境下 Nginx 多站点综合实践:域名解析、访问控制与 HTTPS 加密部署》​
  • 电脑 CPU、GPU 版本知识详解及查看方法
  • xformers包介绍及代码示例
  • 力扣刷题 -- 100.相同的树
  • 计算机组成原理——数据的表示与运算1
  • 【vector 迭代器用法】ans.end()[-1]
  • 如何使用Ansible一键部署Nacos集群?
  • Sentinel-2 卫星 轨道编号及数据下载
  • 影刀 RPA:批量修改 Word 文档格式,高效便捷省时省力
  • Unity 渲染管线详解与实战分析
  • ANSYS 2025 R1软件下载及安装教程|附安装文件
  • 数据结构之克鲁斯卡尔算法
  • GeoTools 自定义坐标系
  • React基础(1)
  • RS485和Modbus
  • Python 基础语法与数据类型(十五) - 异常处理
  • 把sudo搞坏了怎么修复:报错sudo: /etc/sudo.conf is owned by uid 1000, should be 0
  • 小孙学变频学习笔记(十一)关于V/F曲线的讨论