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

线性数据结构-手写链表-LinkList

为什么需要手写实现数据结构?
其实技术的本身就是基础的积累和搭建的过程,基础扎实 地基平稳 万丈高楼才会久战不衰,做技术能一通百,百通千就不怕有再难得技术了。
一:链表的分类
主要有单向,双向和循环链表的展示形式。
1:单向链表
单链表包含具有数据字段的节点以及指向节点行中的下一个节点的“下一个”字段。可以对单链表执行的操作包括插入、删除和遍历。
在这里插入图片描述
2:双向链表
在“双向链表”中,除了下一个节点链接之外,每个节点还包含指向序列中“前一个”节点的第二个链接字段。这两个链接可以称为’前‘ 和’后’,或’下’和’上’。
在这里插入图片描述
3:循环列表
在列表的最后一个节点中,链接字段通常包含一个空引用,一个特殊的值用于指示缺少进一步的节点。一个不太常见的约定是让它指向列表的第一个节点。在这种情况下,列表被称为“循环”或“循环链接”;否则,它被称为“开放”或“线性”。它是一个列表,其中最后一个指针指向第一个节点。
在这里插入图片描述
所以我们在学习的过程中,以使用 Java 程序员本身常用的语言来分析学习,并通过简化结构的方式把 LinkedList 手写实现,让友友们更能方便的理解链表。
以下为实战过程
A:链表的节点
在这里插入图片描述
链表的数据结构核心根基就在于节点对象的使用,并在节点对象中关联当前节点的上一个和下一个节点。通过这样的方式构建出链表结构。
但也因为在链表上添加每个元素的时候,都需要创建新的 Node 节点,所以这也是一部分耗时的操作
B:头插节点
在这里插入图片描述
B1.1:先把头节点记录下来。之后创建一个新的节点,新的节点构造函数的头节点入参为null,通过这样的方式构建出一个新的头节点。
B1.2:原来的头结点,设置 f.prev 连接到新的头节点,这样的就可以完成头插的操作了。
C: 尾插节点
在这里插入图片描述
尾差节点与头插节点正好相反,通过记录当前的结尾节点,创建新的节点,并把当前的结尾节点,通过 l.next 关联到新创建的节点上。
D:拆链操作
此方法比较难懂 给大家上图
在这里插入图片描述
unlink 是一种拆链操作,只要你给定一个元素,它就可以把当前这个元素的上一个节点和一个节点进行相连,之后把自己拆除。
这个方法常用于 remove 移除元素操作,因为整个操作过程不需要遍历,拆除元素后也不需要复制新的空间,所以时间复杂读为 O(1)
E:删除元素
在这里插入图片描述
删除元素的过程需要 for 循环判断比删除元素的值,找到对应的元素,进行删除。
最后测试用例走一波
在这里插入图片描述
附赠经典面试题:
描述一下链表的数据结构?
Java 中 LinkedList 使用的是单向链表、双向链表还是循环链表?
链表中数据的插入、删除、获取元素,时间复杂度是多少?
什么场景下使用链表更合适?
友友们在评论区写下你们的答案!
以上的是线性数据结构-手写链表-LinkList 若需完整代码 可识别二维码后 给您发代码。
在这里插入图片描述

http://www.lryc.cn/news/344076.html

相关文章:

  • 快手客户端一二面+美团前端一面+腾讯企业微信开发客户端一面
  • 探索数据结构
  • VMware虚拟机中ubuntu使用记录(6)—— 如何标定单目相机的内参(张正友标定法)
  • 每日OJ题_记忆化搜索②_力扣62. 不同路径(三种解法)
  • 【微信小程序开发】微信小程序、大前端之flex布局方式详细解析
  • 代码随想录算法训练营第二十天:二叉树成长
  • Opensbi初始化分析:设备初始化-warmboot
  • 软考 系统架构设计师系列知识点之软件可靠性基础知识(13)
  • 将ESP工作为AP路由模式并当成服务器
  • Python深度学习基于Tensorflow(6)神经网络基础
  • 力扣HOT100 - 35. 搜索插入位置
  • MinimogWP WordPress 主题下载——优雅至上,功能无限
  • kube-prometheus部署到 k8s 集群
  • 从0开始学习python(六)
  • OpenGL 入门(三)—— OpenGL 与 OpenCV 共同打造大眼滤镜
  • Linux服务器安全基础 - 查看入侵痕迹
  • Java反射机制的实战应用:探索其魅力与局限
  • vue3项目 文件组成
  • C语言关键字 typedef 的功能是什么?
  • 【YoloDeployCsharp】基于.NET Framework的YOLO深度学习模型部署测试平台-源码下载与项目配置
  • 如何在 Ubuntu 12.04 VPS 上使用 MongoDB 创建分片集群
  • 阿里云VOD视频点播流程(1)
  • Python爬虫获取豆瓣电影Top100
  • 动态规划专训8——背包问题
  • 软件杯 深度学习花卉识别 - python 机器视觉 opencv
  • 学习笔记:【QC】Android Q - IMS 模块
  • NodeMCU ESP8266 操作 SSD1306 OLED显示屏详解(图文并茂)
  • 不抽象:Increase API 设计原则
  • mybatis调用数据库存储过程
  • 【git】发生冲突后回滚提交