双向链表
java实现双向链表
package com.scc.demo; public class MyLinkedList { private Node first;// 链表中第一个节点 private Node last;// 链表中最后一个节点 private int size;// 节点的数量 // 创链表中的每一个节点 class Node { Node prev;// 上一个节点对象 Node next;// 下一个节点对象 Object ele;// 当前节点 元素 // 添加一个构造方法可以节点时并赋值 public Node(Object ele) { this.ele = ele; } } // 添加数据的第一位 public void addFirst(Object ele) { Node node = new Node(ele);// 节点对象 // 如果当前节点是第一次添加(当前节点即是开头也是结尾) if (size == 0) { this.first = node; this.last = node; } else { // 新节点的下一位是原有的节点 node.next = this.first; // 把新增的节点作为原有节点之前的一个节点 // 即第一个节点 this.first.prev = node; // 需要开始节点更改 this.first = node; } size++; } // 添加最后一位 public void addLast(Object ele) { // 先创建节点 Node node = new Node(ele); if (size == 0) { this.first = node; this.last = node; } else { // 当前节点的下一位是新的节点 this.last.next = node; // 新节点的上一位是原有节点 node.prev = this.last; // 更新新节点为下一个节点 this.last = node; } } @Override public String toString() { if (size == 0) { return "[]"; } StringBuffer sbr = new StringBuffer(); // 获取第一个节点 sbr.append("["); for (int i = 0; i < size - 1; i++) { sbr.append(first.ele); if (i != size - 1) { sbr.append(","); } else { sbr.append("]"); } first = first.next;// 获取下一个节点 } return sbr.toString(); } // 删除节点 public void remove(Object ele) { // 找到要删除的节点 Node first = this.first; for (int i = 0; i < size; i++) { if (!first.ele.equals(ele)) { if (first.next == null) { return; } first = first.next; } } // 删除节点 if (first == this.first) { this.first = first.next; this.first.prev = null; } else if (first == last) { this.last = first.prev; this.last.next = null; } else { // 把删除节点的上一个节点连接删除节点的下一个节点 first.prev.next = first.next; // 把删除节点的下一个节点连接删除节点的上一个节点 first.next.prev = first.prev; } size--; } }
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
ApiPost自动化测试基础之:流程测试
我们在《ApiPost自动化测试基础之:接口参数依赖的情景处理》和《ApiPost自动化测试基础之:如何使用测试校验(测试用例)?》分别讲解了ApiPost自动化测试的基础知识。 本文主要讲解如何使用ApiPost的流程测试。 ApiPost简介: ApiPost是一个支持团队协作,并可直接生成文档的API调试、管理工具。它支持模拟POST、GET、PUT等常见请求,是后台接口开发者或前端、接口测试人员不可多得的工具 。 官网:https://www.apipost.cn/ 什么是流程测试? 我们可以把多个接口归到一组(可以有依赖关系),一键发送请求,获取测试结果。称之为:流程测试。 好了,让我们开始测试! 1、准备 为了便于演示,首先,我们准备2个接口: get_token接口: 请求地址:{{url}}get_token.php 它将返回一个token参数。如图: 我们给它定义一个测试用例: need_token接口: 请求地址:{{url}}need_token.php 它需要get_token接口返回的token参数作为自己的请求参数。 我们给他定义一个测试用例: 2、创建测试...
- 下一篇
前端面试:谈谈 JS 垃圾回收机制
摘要: 不是每个人都回答的出来... 原文:前端面试:谈谈 JS 垃圾回收机制 作者:前端小智 最近看到一些面试的回顾,不少有被面试官问到谈谈JS 垃圾回收机制,说实话,面试官会问这个问题,说明他最近看到一些关于 JS 垃圾回收机制的相关的文章,为了 B 格,就会顺带的问问。 最近看到一篇讲 JS 垃圾回收的国外文章,觉得讲得明白,所以就翻译过来了,希望对你们有所帮助。 垃圾回收 JavaScript 中的内存管理是自动执行的,而且是不可见的。我们创建基本类型、对象、函数……所有这些都需要内存。 当不再需要某样东西时会发生什么? JavaScript 引擎是如何发现并清理它? 可达性 JavaScript 中内存管理的主要概念是可达性。 简单地说,“可达性” 值就是那些以某种方式可访问或可用的值,它们被保证存储在内存中。 1. 有一组基本的固有可达值,由于显而易见的原因无法删除。例如: 本地函数的局部变量和参数 当前嵌套调用链上的其他函数的变量和参数 全局变量 还有一些其他的,内部的 这些值称为根。 2. 如果引用或引用链可以从根访问任何其他值,则认为该值是可访问的。 例如,如果局部变...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,CentOS7官方镜像安装Oracle11G
- Red5直播服务器,属于Java语言的直播服务器
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池