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

数据结构-双向链表 代码实现

在这里插入图片描述

java 代码

public class MyDoubleLink {public int linkSize = 0;public Node head = null;// 头结点public Node tail = null;// 尾结点// 使用内部类定义节点public class Node {public Object data;public Node prev = null;public Node next = null;public Node(Object data) {this.data = data;}}/*** 添加节点至尾部* @param data*/public void addLast(Object data) {linkSize++;Node newNode = new Node(data);if (head == null) {// 第一个元素head = newNode;return;}if (tail == null) {// 第二个元素tail = newNode;tail.prev = head;head.next = tail;return;}// 将新节点的指针和 tail 节点建立关系tail.next = newNode;newNode.prev = tail;tail = newNode;}/*** 删除指定位置的节点* 遍历到指定节点,将指定位置的上一个节点与下一个节点指针建立关系*  * @param index* @return*/public boolean delete(int index) {if (index < 0 || index >= linkSize) {return false;}linkSize--;// 删除的是头结点if (index == 0) {// 只有一个头结点if (head.next == null) {head = null;return true;}head = head.next;// 删除头结点head.prev = null;return true;}// 删除的是尾节点if (index == (linkSize - 1)) {tail = tail.prev;tail.next = null;return true;}Node tmpNode = head;// 遍历链表,获取被删除的节点for (int i = 0; i < index; i++) {tmpNode = tmpNode.next;}// tmpNode 是被删除节点,将其上下两个节点之间建立关系tmpNode.prev.next = tmpNode.next;tmpNode.next.prev = tmpNode.prev;return true;}/*** 获取指定位置的节点* * @param index* @return*/public Node get(int index) {if (index < 0 || index >= linkSize) {throw new RuntimeException("指针越界");}Node tmpNode = head;// 遍历节点,获取指定位置的节点for (int i = 0; i < index; i++) {tmpNode = tmpNode.next;}return tmpNode;}/*** 打印链表上所有节点的数据
*/public void print() {Node tmpNode = head;for (int i = 0; i < linkSize; i++) {System.out.println(tmpNode.data);tmpNode = tmpNode.next;}}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 二刷代码随想录训练营Day 38|322. 零钱兑换、279.完全平方数、139.单词拆分
  • 证书学习(一)keytool 工具使用介绍
  • Lesson 81+82 Roast beef and potatoes
  • RAG优化技巧 | 7大挑战与解決方式 | 提高你的LLM: 下篇
  • k8s 进阶实战笔记 | Ingress-traefik(一)
  • C++ | Leetcode C++题解之第363题矩形区域不超过K的最大数值和
  • 【linux】sar -d 磁盘性能
  • 【IEEE】第四届智能通信与计算国际学术会议(ICICC 2024,10月18-20)
  • vuejs 源代码启动 调试
  • Java中的持久化框架对比:JPA vs MyBatis
  • MAC 安装 MySQL
  • 计算机毕业设计选题推荐-花园管理系统-Java/Python项目实战
  • Linux | vim编辑器的使用技巧:自动缩进、补全括号、光标定位、批量注释
  • Spring Cloud LoadBalancer 源码解析
  • 前端CSS选择器
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 5、React组件事件详解
  • axios 和 cookie 的那些事
  • bootstrap创建登录注册页面
  • CentOS 7 修改主机名
  • es6
  • JavaScript 基本功--面试宝典
  • jquery ajax学习笔记
  • js操作时间(持续更新)
  • markdown编辑器简评
  • Mybatis初体验
  • nginx 配置多 域名 + 多 https
  • Objective-C 中关联引用的概念
  • Rancher-k8s加速安装文档
  • spring-boot List转Page
  • windows下如何用phpstorm同步测试服务器
  • 从零开始在ubuntu上搭建node开发环境
  • 对超线程几个不同角度的解释
  • 回顾2016
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 基于组件的设计工作流与界面抽象
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 学习使用ExpressJS 4.0中的新Router
  • 智能网联汽车信息安全
  • 最简单的无缝轮播
  • postgresql行列转换函数
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (31)对象的克隆
  • (4)Elastix图像配准:3D图像
  • (七)c52学习之旅-中断
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (四)js前端开发中设计模式之工厂方法模式
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • **《Linux/Unix系统编程手册》读书笔记24章**
  • .java 9 找不到符号_java找不到符号
  • .net mvc 获取url中controller和action
  • .NET编程——利用C#调用海康机器人工业相机SDK实现回调取图与软触发取图【含免费源码】
  • .net开发引用程序集提示没有强名称的解决办法
  • .NET开源项目介绍及资源推荐:数据持久层