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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值