双向链表
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将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2全家桶,快速入门学习开发网站教程
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程