手写双链表,并实现增删改查

public class DoublyLinkedListT {

// 一个空的头节点

private final Node head = new Node(null);

@Getter

private int size = 0;

public DoublyLinkedList() {

head.pre = head;

head.next = head;

}

@SafeVarargs

public final void addAll(T... data) {

if (data == null) return;

for (T datum : data) {

add(datum);

}

}

public void add(T datum) {

head.pre.next = new Node(datum, head.pre, head);

head.pre = head.pre.next;

head.pre.next = head;

size++;

}

public void remove(int index) {

remove(getNode(index));

}

private void remove(Node node) {

node.next.pre = node.pre;

node.pre.next = node.next;

size--;

}

public void remove(T datum) {

Node i = head.next;

while (i != head) {

if (i.data == datum) {

remove(i);

break;

}

i = i.next;

}

}

public void set(int index, T data) {

getNode(index).setData(data);

}

public int indexOf(T datum) {

Node i = head.next;

int index = 0;

while (i != head) {

if (i.data == datum) {

break;

}

i = i.next;

index++;

}

if (index = size)

return -1;

return index;

}

public T get(int index) {

return getNode(index).data;

}

private Node getNode(int index) {

if (index = size)

throw new IndexOutOfBoundsException("size:" + size + "。index:" + index);

Node node = head;

while (index = 0) {

node = node.next;

index --;

}

return node;

}

@Override

public String toString() {

Node i = head.next;

StringBuilder builder = new StringBuilder();

while (i != head) {

builder.append(" ").append(i.data).append(" ");

i = i.next;

}

return "DoublyLinkedList{ " + builder.toString() + " }";

}

@Data

@NoArgsConstructor

@AllArgsConstructor

private class Node {

private T data;

private Node pre;

private Node next;

public Node(T data) {

this.data = data;

}

public Node(T data, Node pre) {

this.data = data;

this.pre = pre;

}

}

}

单元测试:

class DoublyLinkedListTest {

@Test

void addAll() {

DoublyLinkedListInteger list = new DoublyLinkedList();

list.addAll(1,2,3);

System.out.println(list.toString());

}

@Test

void add() {

DoublyLinkedListInteger list = new DoublyLinkedList();

list.add(3);

System.out.println(list.toString());

}

@Test

void remove() {

DoublyLinkedListInteger list = new DoublyLinkedList();

list.addAll(1,2,3);

list.remove(0);

System.out.println(list.toString());

}

@Test

void testRemove() {

DoublyLinkedListInteger list = new DoublyLinkedList();

Integer i1 = new Integer(1), i2 = new Integer(2);

list.addAll(i1, i2);

list.remove(new Integer(1));

System.out.println(list.toString());

}

@Test

void set() {

DoublyLinkedListInteger list = new DoublyLinkedList();

list.addAll(1,2,3);

list.set(0, 11);

System.out.println(list.toString());

}

@Test

void indexOf() {

DoublyLinkedListInteger list = new DoublyLinkedList();

Integer i1 = new Integer(1), i2 = new Integer(2);

list.addAll(i1, i2);

System.out.println(list.indexOf(new Integer(1)));

}

@Test

void get() {

DoublyLinkedListInteger list = new DoublyLinkedList();

Integer i1 = new Integer(1), i2 = new Integer(2);

list.addAll(i1, i2);

System.out.println(list.get(0));

}

@Test

void getSize() {

DoublyLinkedListInteger list = new DoublyLinkedList();

list.addAll(1,2,3);

System.out.println(list.toString());

System.out.println(list.getSize());

}

}

手写双链表,并实现增删改查 相关文章

30 Spring Cloud使用Turbine实现集群监控

前面我们实现了对单个服务实例的监控,当然在实际应用中,单个实例的监控数据没有多大的价值,我们更需要的是一个集群系统的监控信息,这时我们就需要 Turbine。 Turbine 是用来监控集群的,通过它来汇集监控信息,并将聚合后的信息提供给 Hystrix Dashboard

vue springboot 实现excel导出

实现excel 导出 一、需求 实现 excel 的导出 二、技术 选用 easypoi 官网: https://gitee.com/lemur/easypoi#http://doc.wupaas.com/docs/easypoi/easypoi-1c0u4mo8p4ro8 三、实现 1、前端 el-button type="success" @click="handleExport"导出i class="el-

手写单链表,并实现元素逆置

public class SinglyLinkedListT { // 一个空的头节点 private final Node head = new Node(null); private Node tail = head; @SafeVarargs public final void addAll(T... data) { if (data == null) return; for (T datum : data) { tail.next = new Node

QEMU中VIRTIO实现

http://39.107.46.219/qemu%E8%99%9A%E6%8B%9F%E5%8C%96%E5%AE%89%E5%85%A8%EF%BC%88%E4%BA%8C%EF%BC%89/ VIRTIO设备 ? 了解QEMU和KVM交互的知道,客户机的IO操作通过KVM处理后再交由QEMU,反馈也如此。这种纯软件的模拟IO设备,增加了IO的延迟。 ? 而Virtio

redis6.0.5之zset阅读笔记3--跳跃列表(zskiplist)之代码实现2-范围相关函数

***********************************************************************************************/* Struct to hold a inclusive/exclusive range spec by score comparison. */通过数值比较 用来保持 闭/开区间 范围确定typedef struct { double min, m

写一个计算器,实现加减乘除功能,并且能够循环接收新数据,通过用户交互实现

1 //写一个计算器,实现加减乘除功能,并且能够循环接收新数据,通过用户交互实现 2 3 import java.util.Scanner; 4 5 public class Demo07 { 6 public static void main(String[] args) { 7 Scanner scanner = new Scanner(System.in); 8 while (scanner.ha

26 Spring Cloud使用Hystrix实现容错处理

创建一个新的Maven项目 hystrix-feign-demo,增加 Hystrix 的依赖 dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-netflix-hystrix/artifactId/dependency 在启动类上添加 @EnableHystrix 或者 @EnableCircuitBreaker

Vue中使用animate.css库

先来看一个例子,要实现的效果是文字弹跳放大在缩小显现和隐藏: !DOCTYPE htmlhtml lang="en"head meta charset="UTF-8" title在vue中使用Animate.css库/title link rel="stylesheet" href="../animate.css" script src="../vue.js"/script style @keyframe

【转载】python实现高质量PDF转PNG

换工作了,要转移党组织关系,然后介绍信pdf不知道为什么打印出来是乱码,所以没办法需要转成图片格式。 wps需要收费,嗨格式需要收费,无奈使用python大法了。 转载知乎链接:https://zhuanlan.zhihu.com/p/102742847 1、安装第三方包 pip install fitzpip

MyBatis-Plus 如何实现连表查询

MyBatis-Plus 如何实现连表查询 项目地址: gitee github 安装 在项目中添加依赖,依赖已经包含了mybatis-plus-boot-starter3.4.2 依赖后无需再次引入mybatis-plus dependency groupIdcom.github.yulichang/groupId artifactIdmybatis-plus-join/artifactId ve

c语言 双向链表增删修查,手写双链表,并实现增删改查相关推荐

  1. c语言实现双链表的基本操作—增删改查

    //初始化 Node*InitList() {Node*head=(Node*)malloc(sizeof(Node));if(NULL==head){printf("内存分配失败!&quo ...

  2. Mybaits:凡人修仙秘籍——第二话:MyBatis 的增删改查

                目录 一.创建用户.角色和权限表 二.创建实体类 三.使用XML方式 四.select用法--单表查询 1.配置UserMapper 2.写出对应的接口类 3.关于userMa ...

  3. 学习手扎20190313——dick操作(增删改查)

    dick # 数据类型划分:可变数据类型,不可变数据类型 # 不可变数据类型:元祖 bool int str 可哈希 # 可变数据类型:list dick set 不可哈希# 增删改查dic1 = { ...

  4. 单链表LinkedList的增删改查

    数组作为数据存储结构有一定的缺陷.在无序数组中,搜索性能差,在有序数组中,插入效率又很低(插入位置后面的元素需要集体后移),而且这两种数组的删除效率(集体前移)都很低,并且数组在创建后,其大小是固定了 ...

  5. thinkphp连mysql增删改查_ThinkPHP5.1框架数据库链接和增删改查操作示例

    本文实例讲述了ThinkPHP5.1框架数据库链接和增删改查操作.分享给大家供大家参考,具体如 本文实例讲述了ThinkPHP5.1框架数据库链接和增删改查操作.分享给大家供大家参考,具体如下: 一. ...

  6. python增删改查人名管理_python3字典列表的增删改查(名片管理系统函数版)

    1.列表的增删改查 增加:有三种添加方式(append.insert.extend) #append:把添加的内容直接添加到列表的末尾 a=[1,2,3] a.append('abc') print( ...

  7. java mongodb 增删改查_java操作mongodb:基本的增删改查

    java操作mongodb的代码,包含基本的增删改查操作 获取数据库连接工具类 package com.liuc.db;import java.net.UnknownHostException;imp ...

  8. flask对mysql数据库增删改查_Flask学习(三) - Flask-SQLAlchemy对数据库增删改查

    Flask-SQLAlchemy对数据库增删改查 安装 pip install flask-sqlalchemy 具体不多说了,主要是对数据库进行简单的增删改查,上代码,看注释 @app.route( ...

  9. php连接数据库实现增删改查,PHP连接数据库,实现最基本的增删改查(面向过程)

    在我们把PHP的环境搭建好以后,我们来看一下怎样通过PHP连接MySQL数据库,以及怎样实现最基本的增删改查.其它就不多说了,直接上代码吧. 1.PHP连接MySQL数据库 1 2 3 4 5 6 7 ...

最新文章

  1. python 导出mysql 视图_【Python基础】mysql数据库视图是什么
  2. C++对象的动态建立
  3. C语言*运算符和运算符
  4. Chapter5_Speaker_Verification
  5. 纯手工打造漂亮的垂直时间轴,使用最简单的HTML+CSS+JQUERY完成100个版本更新记录的华丽转身!...
  6. 我的计时软件TimeDogV13
  7. 介绍两个office软件的插件,很好用——SaveAsPDFandXPS.exe和OfficeTab
  8. unity零基础学习
  9. 网页如何实现平均分成左右两部分
  10. unity制作子弹击砖块过程分析
  11. linux安全工具(RKHunter)
  12. Android搭建无线调试环境
  13. 薅羊毛!企业微信自动加好友工具免费使用机会!
  14. 李兴华课程 java学习笔记
  15. 云存储和网盘有何区别
  16. 英文论文审稿意见汇总
  17. groovy if 判断字符串_Groovy快速入门看这篇就够了
  18. python之python3.x版本用urllib爬虫出现的module 'urllib' has no attribute 'urlopen'与urllib.error.HTTPError: HTT
  19. 目前就常用计算机类型,CAD-CAM练习题
  20. 串口数据可视化工具(Serial Studio)使用

热门文章

  1. 推荐线上英语词典及英语学习网站
  2. 测试圈相亲平台开发流程(11):数据层简单实现-个人信息表/择偶要求表
  3. python iphone 爬虫_Python爬虫实战之抓取京东苹果手机评价!
  4. 大数据前景毋庸置疑 零基础小白要学习什么
  5. 电子文献引用 引用csdn
  6. ld 新解Hello world
  7. 一场没有败者的软件定义存储2.0 PK赛
  8. 前端技术之Ajax(一)
  9. c++ 制作低配扫雷游戏
  10. java int位运算_java中int的表示方法,位运算的解析