当前位置: 首页 > 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.xdnf.cn/news/1164889.html

相关文章:

  • Java注解家族--`@ResponseBody`
  • 神经网络——线性层
  • 【c++】leetcode5 最长回文子串
  • 蚂蚁数科AI数据产业基地正式投产,携手苏州推进AI产业落地
  • 奥比中光深度相机开发
  • 感知机-梯度下降法
  • 141 个 LangChain4j Maven 组件分类解析、多场景实战攻略
  • 一个月掌握数据结构与算法:高效学习计划
  • hot100回归复习(算法总结1-38)
  • 零拷贝技术(Zero-Copy)
  • 网络协议(四)网络层 路由协议
  • C++基于libmodbus库实现modbus TCP/RTU通信
  • 大模型——上下文工程 (Context Engineering) – 现代 AI 系统的架构基础
  • C# 实现:动态规划解决 0/1 背包问题
  • iOS开发 Swift 速记2:三种集合类型 Array Set Dictionary
  • OCR 身份识别:让身份信息录入场景更高效安全
  • 如何使用终端查看任意Ubuntu的版本信息
  • 用 Three.js 实现 PlayCanvas 风格 PBR 材质教程(第二篇):核心参数与光照模型
  • DBSCAN聚类算法
  • OpenAI Codex CLI与 Google Gemini CLI 比较
  • 关于java8里边Collectors.toMap()的空限制
  • 泛型:C#中的类型抽象艺术
  • Android NDK ffmpeg 音视频开发实战
  • 数据结构 之 【排序】(直接插入排序、希尔排序)
  • 【C++】list的模拟实现
  • 音视频学习(四十二):H264帧间压缩技术
  • 周志华《机器学习导论》第13章 半监督学习
  • [深度学习] 大模型学习3上-模型训练与微调
  • 机器学习初学者理论初解
  • MySQL:表的增删查改