手写双链表,并实现增删改查
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