Java实现双链表的示例代码

yizhihongxing

下面我将为您详细讲解Java实现双链表的示例代码的完整攻略。

什么是双链表

双链表是一种常见的数据结构,在链表中每个节点中都存储了前驱节点和后继节点的地址。与单链表相比,双链表能够更快速地进行双向遍历,但是需要更多的空间来存储节点的前驱和后继节点地址。

Java实现双链表的步骤

下面是实现双链表的步骤:

  1. 定义节点类,该节点类应该包含前驱节点和后继节点的引用。

  2. 定义双链表类,该类中应该包含头节点和尾节点的引用。

  3. 定义添加节点的方法,该方法应该在双链表末尾添加节点。

  4. 定义删除节点的方法,该方法应该根据节点的值在双链表中删除指定节点。

  5. 定义遍历节点的方法,该方法应该可以实现正向和反向遍历。

下面我们将按照上述步骤逐步实现Java双链表的示例代码。

  1. 定义节点类
public class DoublyLinkedListNode<T> {
    public T value;
    public DoublyLinkedListNode<T> prev;
    public DoublyLinkedListNode<T> next;

    public DoublyLinkedListNode(T value) {
        this.value = value;
        this.prev = null;
        this.next = null;
    }
}

节点类包含一个泛型的值,以及前驱节点和后继节点的引用。

  1. 定义双链表类
public class DoublyLinkedList<T> {
    public DoublyLinkedListNode<T> head;
    public DoublyLinkedListNode<T> tail;

    public DoublyLinkedList() {
        this.head = null;
        this.tail = null;
    }

    public void add(T value) {
        DoublyLinkedListNode<T> node = new DoublyLinkedListNode<>(value);

        if (this.head == null) {
            this.head = node;
        } else {
            this.tail.next = node;
            node.prev = this.tail;
        }

        this.tail = node;
    }

    public void delete(T value) {
        DoublyLinkedListNode<T> current = this.head;

        while (current != null) {
            if (current.value.equals(value)) {
                if (current.prev != null) {
                    current.prev.next = current.next;
                } else {
                    this.head = current.next;
                }

                if (current.next != null) {
                    current.next.prev = current.prev;
                } else {
                    this.tail = current.prev;
                }
            }

            current = current.next;
        }
    }

    public void traverse(boolean reverse) {
        DoublyLinkedListNode<T> current = reverse ? this.tail : this.head;

        while (current != null) {
            System.out.println(current.value);
            current = reverse ? current.prev : current.next;
        }
    }
}

双链表类包含头节点和尾节点的引用。该类中定义了添加节点、删除节点和遍历节点的方法。其中,添加节点的方法将节点添加到链表末尾,删除节点的方法会根据节点的值删除指定的节点,而遍历节点的方法可以实现正向和反向遍历。

  1. 测试示例1
DoublyLinkedList<Integer> list = new DoublyLinkedList<>();
list.add(1);
list.add(2);
list.add(3);

list.traverse(false);  // 正向遍历,输出1、2、3

上述代码创建了一个双链表,并在其中分别添加了值为1、2、3的节点,然后正向遍历双链表并输出节点的值。

  1. 测试示例2
DoublyLinkedList<String> list = new DoublyLinkedList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");

list.delete("b");

list.traverse(true);   // 反向遍历,输出d、c、a

上述代码创建了一个双链表,并在其中添加了值为"a"、"b"、"c"、"d"的节点,然后删除了节点值为"b"的节点,并反向遍历双链表并输出节点的值。

至此,我们已经完成了Java实现双链表的示例代码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现双链表的示例代码 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Linux下Java环境变量的安装与配置

    下面是 Linux 下 Java 环境变量的安装与配置的完整攻略: 安装 Java 首先需要确认系统中是否已经安装了 java。 java -version 如果没有安装,则需要安装 Java。 可以从官网下载 JDK 安装包(https://www.oracle.com/java/technologies/javase-jdk15-downloads.ht…

    other 2023年6月27日
    00
  • 慎升级! Win11更新KB5025239后遇 错误报告 TPM 2.0 / 蓝屏 等问题

    慎升级!Win11更新KB5025239后遇错误报告TPM 2.0 / 蓝屏等问题攻略 问题描述 最近,一些用户在升级Windows 11操作系统后遇到了一些问题,包括错误报告TPM 2.0和蓝屏等问题。这些问题可能与最新的更新KB5025239有关。下面是解决这些问题的攻略。 步骤一:备份重要数据 在进行任何操作之前,建议您首先备份重要的数据。这样可以确保…

    other 2023年8月3日
    00
  • django数据库migrate失败的解决方法解析

    这里是关于“django数据库migrate失败的解决方法解析”的完整攻略。 1. 确定失败原因 在解决数据库migrate失败的问题之前,首先需要确定失败的原因。可以通过查看控制台输出的错误信息来诊断问题,确定具体的错误原因。 常见的数据库migrate失败原因包括: 数据库连接失败 数据库表结构已更改 数据库表已删除 数据库迁移序列错误 在得出错误原因之…

    other 2023年6月27日
    00
  • Java动态脚本Groovy获取Bean技巧

    Java动态脚本Groovy获取Bean技巧 在Java中使用Groovy可以轻松地使用动态脚本获取Bean。这里介绍一些Java动态脚本Groovy获取Bean的技巧。 导入Groovy库 Groovy是一种基于JVM的动态脚本语言,所以它可以和Java代码一起运行。为了使用Groovy获取Bean,需要在Java项目中导入Groovy库。 示例代码 @G…

    other 2023年6月27日
    00
  • react如何用懒加载减少首屏加载时间

    React使用懒加载是一种减少首屏加载时间的常用技巧。懒加载是指在需要的时候再加载组件或者模块,而不是在初始加载时就全部加载。React使用懒加载可以使得首屏只加载必要的内容,从而提高页面加载速度和用户体验。 以下是使用懒加载的完整攻略: 第一步:安装React.lazy React.lazy函数允许您能够使用懒加载加载组件。要使用它,请先安装React.l…

    other 2023年6月25日
    00
  • 教你如何用pycharm安装pyqt5及其相关配置

    下面是详细讲解如何在PyCharm中安装PyQt5及其相关配置的完整攻略: 安装PyQt5 确认Python环境 首先需要确认在 PyCharm 中使用的是正确的 Python 解释器,在 PyCharm 中转到 Settings -> Project Interpreter,确保选中的解释器为目标 Python 版本。 安装PyQt5 方法一:使用 …

    other 2023年6月27日
    00
  • MySQL插入数据时插入无效列的解决方法

    下面是详细讲解MySQL插入无效列的解决方法的攻略。 1. 什么是无效列 在MySQL中,无效列指的是在插入数据时,插入的列名无法在表中找到对应的列,或者表中存在该列,但该列不能被插入(该列不存在默认值、不允许为空并且没有提供值等)。 例如,有一张名为users的用户表,包含了三个字段:id、name和age。当我们向表中插入一条数据时,如果插入了一个无效列…

    other 2023年6月27日
    00
  • C语言中你容易忽略的知识点与技巧总结

    C语言中容易忽略的知识点与技巧总结 C语言中容易忽略的知识点 宏定义和条件编译 宏定义是预处理器对代码的一种替换,可以用来定义某个常量或者函数 条件编译可以根据一些条件来选择性地编译代码,减少不必要的代码生成,提高代码执行效率 示例: #include <stdio.h> #define MAX 100 int main() { #ifdef W…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部