首页 > 其他分享 >9.20打卡带哨兵的双向环形链表

9.20打卡带哨兵的双向环形链表

时间:2023-09-20 21:44:06浏览次数:35  
标签:Node 9.20 value next 链表 headtail 打卡 prev public

 

 

import java.util.ArrayList;

//双向环形链表 哨兵既是头也是尾 哨兵的prev指向最后一个元素,最后一个元素的next指向哨兵
public class Main {
public static void main(String[] args) {
DoubleLinkedList d = new DoubleLinkedList();
d.addFirst(3);
d.addFirst(2);
d.addFirst(1);
d.addLast(4);
d.addLast(5);
d.addLast(6);
d.addLast(7);
d.removeFirst();
d.removeLast();
d.removeValue(6);
d.insertIndex(0, 1);
d.insertIndex(5, 6);
System.out.println(d.length());
d.removeIndex(1);
d.query();
}

public static class DoubleLinkedList {
public static class Node {
Node prev;
int value;
Node next;

public Node(Node prev, int value, Node next) {
this.prev = prev;
this.value = value;
this.next = next;
}
}

private Node headtail = new Node(null, -1, null);

public DoubleLinkedList() {
headtail.prev = headtail;
headtail.next = headtail;
}

public void addFirst(int value) {

Node p = new Node(headtail, value, headtail.next);
headtail.next.prev = p;
headtail.next = p;

}

public void addLast(int value) {
Node p = new Node(headtail.prev, value, headtail);
headtail.prev.next = p;
headtail.prev = p;
}

public void removeFirst() {
Node p = headtail.next;
if (p.next == p) {
System.out.println("无法删除哨兵");
return;
}
headtail.next = p.next;
p.next.prev = headtail;
}

public void removeLast() {
Node p = headtail.prev;
if (p.next == p) {
System.out.println("无法删除哨兵");
return;
}
p.prev.next = headtail;
headtail.prev = p.prev;
}

public void removeValue(int value) {
ArrayList<Node> nodes = findValue(value);
if (nodes == null || nodes.isEmpty()) {
System.out.println("没有该元素");
return;
}
for (Node node : nodes) {
node.prev.next = node.next;
node.next.prev = node.prev;
}
}

public void removeIndex(int index) {
if (index < 0 || index >= length()) {
System.out.println("索引超出范围");
return;
}
if (index == length() - 1) {
removeLast();
return;
}
Node p = findIndex(index);
p.prev.next = p.next;
p.next.prev = p.prev;
}

public void insertIndex(int index, int value) {
Node prev = findIndex(index - 1);
Node p = new Node(prev, value, prev.next);
prev.next.prev = p;//一定注意更改次序
prev.next = p;
}

public ArrayList<Node> findValue(int value) {
ArrayList<Node> nodes = new ArrayList<>();//记录同值节点
for (Node p = headtail.next; p != headtail; p = p.next) {
if (p.value == value) {
nodes.add(p);
}
}
return nodes.isEmpty() ? null : nodes;
}

public Node findIndex(int index) {
if (index == length() - 1) {//最后一个节点
return headtail.prev;
}
int i = -1;
for (Node p = headtail; p.next != headtail; p = p.next) {//要算上哨兵,因为插入需要找前第一个节点,但最后一个节点无法找到
if (i == index) {
return p;
}
i++;
}
return null;
}

public int length() {
int i = 0;
for (Node p = headtail.next; p != headtail; p = p.next) {
i++;
}
return i;
}

public void query() {
for (Node p = headtail.next; p != headtail; p = p.next) {//不输出哨兵
System.out.print(p.value + " ");
}
}
}
}

标签:Node,9.20,value,next,链表,headtail,打卡,prev,public
From: https://www.cnblogs.com/zhaoqianwan/p/17718526.html

相关文章

  • 2023.9.20——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午上课,下午做任务。我了解到的知识点:1.了解了关于模型训练的一些知识和注意事项;2.了解了关于软件构造的一些知识,明日计划:1.上课;2.比赛;......
  • 9.20闲话
    今天破事一样的多。上午模拟赛终于正常了......
  • 2023.9.20
    学习了java的方法,提出新的方法,解决的将是影响做事成效的根本原因。就是将一个大的模块分成小的模块,再把小模块分成更细的把小小模块,一个模块对应于一个单元。学会了软件工程的模块化原则,把一个复杂的系统划分为子模块,方便设计实现和维护。动手又动脑编写一个方法,使用以上算法生......
  • 大二打卡(9.20)
    今天做了什么:英语课,今天帮英语老师擦了黑板,被老师感谢,开心,上课时候好多高中笔记本上记过的词汇短语都记不住汉语意思了,又是想念高中笔记本的一天,然后上节课讲的短语也没记住,只记得写在哪个位置了,可悲,今天遇到什么问题:英语小测试做题速度大不如前,没有写完全部题目,好多生词不认识......
  • 9.20
    对于VSCode的快捷键编辑和导航:Ctrl+X:剪切当前行或选定的代码块。Ctrl+C:复制当前行或选定的代码块。Ctrl+V:粘贴剪贴板的内容。Ctrl+Z:撤销上一步操作。Ctrl+Y:重做上一步被撤销的操作。Ctrl+F:在当前文件中搜索特定的文本。Ctrl+H:在当前文件中搜索和替换特定......
  • 2023.9.20日报
    今天学习了Springboot+MyBatis的整体架构,有一些细节的内容还不是很理解但是可以总结出一些流程和方法1.首先创建Springboot项目,在创建的时候添加SpringWeb、Thymeleaf、MyBatis依赖2.当项目创建完成之后,就可以配置数据库的相关内容了在application.yml中server:port:80......
  • 9.20日
    一、上午上英语课对前几节课的知识进行了总结,回忆了一下学过的知识。二、然后去了操场看他们体测,主要是看看操场修好没,不得不说这效率实在是高,这么长时间还不修,提前打个预防针。三、下午写了Java动手动脑,还有英语的翻译作业,学了web的前后端结合形式,还有Java的许多接口类似于c++......
  • 9.20日
    今天在英语提高课堂上简单学习了状语从句的用法 ......
  • 9.20 英语精读
    Blackpink BLACKPINK'sglobalappealhasneverbeenasubjectivematter.Itisarguablythemostwell-recognisedandsuccessfulall-girlgroupfromtheK-popcapitalofSouthKorea.BLACKPINKhasnowaddedanotherfeathertotheircap,achieving......
  • 920打卡
    1.两数相加(02)给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字0之外,这两个数都不会以0 开头。思想:遍历,考虑进位和链表......