Java数据结构之双向链表的实现

yizhihongxing

Java数据结构之双向链表的实现

一、双向链表的定义

双向链表是一种包含两个指针的链表数据结构,每个节点都有两个指针,一个指向前一个节点,一个指向后一个节点。

二、双向链表的实现

1. 定义节点

首先,我们需要定义一个节点类,包含节点的值,指向前一个节点的指针pre和指向后一个节点的指针next,代码如下:

public class Node {
    int value;
    Node pre;
    Node next;
    public Node(int value) {
        this.value = value;
        this.pre = null;
        this.next = null;
    }
}

2. 定义双向链表类

接着,我们需要定义一个双向链表类,包含指向链表头部的指针head和指向链表尾部的指针tail,代码如下:

public class DoubleLinkedList {
    Node head;
    Node tail;
    public DoubleLinkedList() {
        this.head = null;
        this.tail = null;
    }
}

3. 双向链表的添加操作

双向链表的添加操作和单向链表类似,但需要注意的是在添加节点时,要同时更新前一个节点和后一个节点的指针pre和next,代码如下:

public void add(int value) {
    Node node = new Node(value);
    if (head == null) {
        head = node;
        tail = node;
        return;
    }
    tail.next = node;
    node.pre = tail;
    tail = node;
}

4. 双向链表的删除操作

双向链表的删除操作同样需要同时更新前一个节点和后一个节点的指针pre和next,代码如下:

public void remove(int value) {
    Node current = head;
    while (current != null) {
        if (current.value == value) {
            if (current == head) {
                head = current.next;
                head.pre = null;
            } else if (current == tail) {
                tail = current.pre;
                tail.next = null;
            } else {
                current.pre.next = current.next;
                current.next.pre = current.pre;
            }
            return;
        }
        current = current.next;
    }
}

5. 双向链表的遍历操作

双向链表的遍历操作可以从头部开始遍历,也可以从尾部开始遍历,代码如下:

从头部开始遍历:

public void traverseFromHead() {
    Node current = head;
    while (current != null) {
        System.out.print(current.value + " ");
        current = current.next;
    }
}

从尾部开始遍历:

public void traverseFromTail() {
    Node current = tail;
    while (current != null) {
        System.out.print(current.value + " ");
        current = current.pre;
    }
}

三、示例说明

1. 示例一

DoubleLinkedList list = new DoubleLinkedList();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.remove(2);
list.traverseFromHead();

输出结果:

1 3 4

2. 示例二

DoubleLinkedList list = new DoubleLinkedList();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.traverseFromTail();

输出结果:

4 3 2 1

四、总结

双向链表相对于单向链表,除了可以遍历指向下一个节点的指针next外,还可以遍历指向前一个节点的指针pre。因此,在一些特定的场景下,双向链表可以更加方便地进行操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java数据结构之双向链表的实现 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • NDK 数据结构之队列与栈等的实现

    NDK 数据结构之队列与栈等的实现 引言 Android NDK 是 Android 开发工具包的一部分,可以用 C 和 C++ 编写应用程序和库。NDK 带来了许多好处,例如可以针对不同的平台进行优化,可以通过调用底层 C/C++ 库实现更高效的算法等。 在本篇文档中,我们将探讨如何使用 NDK 实现一些基础的数据结构,包括队列、栈等等。 队列的实现 队列…

    数据结构 2023年5月17日
    00
  • Java 详细分析四个经典链表面试题

    Java 详细分析四个经典链表面试题 简介 链表是数据结构中非常常见的一种形式,在Java中也有非常多的实现方式。本文将介绍Java中四个经典的链表面试题,并且详细分析它们的实现方法。在介绍每一个题目的详细实现之前,我们将简单介绍Java链表和链表常见操作。 Java链表 链表是一种线性结构,其中每个节点包含了一个数据域和一个指针域,指向下一个节点。Java…

    数据结构 2023年5月17日
    00
  • 数据结构与算法中二叉树子结构的详解

    数据结构与算法中二叉树子结构的详解 什么是二叉树子结构 二叉树是一种数据结构,由包含根节点的节点组成,可以拓展为左子树和右子树。二叉树子结构指的是,在一棵二叉树中,具有连续节点的子树。 如何判断是否为二叉树子结构 对于一棵二叉树T和另外一棵二叉树S,我们可以判断S是否为T的子树,遵循以下判断原则: 如果树S为空,则表示S不是T的子树; 如果树S的根节点和树T…

    数据结构 2023年5月17日
    00
  • JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解

    JS中的算法与数据结构:二叉查找树(Binary Sort Tree) 什么是二叉查找树 二叉查找树(Binary Sort Tree),又称二叉搜索树或二叉排序树,是一种特殊的二叉树结构。它具有以下性质: 每个结点最多只有两个子结点。 左子树中的所有结点的值均小于它的根结点的值。 右子树中的所有结点的值均大于它的根结点的值。 没有相同节点值出现 因为具备以…

    数据结构 2023年5月17日
    00
  • 数据结构之数组Array实例详解

    数据结构之数组Array实例详解 什么是数组? 数组是一种由相同类型元素组成的集合,它们在内存中是连续存储的。通过下标可以访问数组中的元素,下标从0开始,到length-1结束。 定义数组 使用Array构造函数 可以使用Array构造函数来创建数组。以下是一些数组的创建方式。 var array1 = new Array(); // 创建空数组 var a…

    数据结构 2023年5月17日
    00
  • C语言数据结构顺序表中的增删改(尾插尾删)教程示例详解

    C语言数据结构顺序表中的增删改(尾插尾删)教程示例详解 什么是顺序表 顺序表是一种线性表,它通过一块连续的存储空间来存储数据。顺序表中的数据元素排列在物理存储空间上也是连续的,每个元素占用一个固定的位置和大小,并且使用下标来访问。 顺序表的定义 下面是以int类型为例的一个简单顺序表的定义: #define SIZE 50 typedef struct { …

    数据结构 2023年5月17日
    00
  • 关于图片存储格式的整理(BMP格式介绍)

    关于图片存储格式的整理(BMP格式介绍) 一、BMP格式概述 BMP全称为Bitmap,是一种基础的图像保存格式,它的格式十分简单,就是将每个像素点的颜色信息直接保存在文件中,因此它的信息量相对较大。 BMP格式的文件头有标准结构,其中包含位图的宽、高、颜色数、位图大小等信息,其中颜色数的位数(色深)决定了BMP文件的大小。BMP文件还可以包含调色板,来进行…

    数据结构 2023年5月17日
    00
  • C语言中关于树和二叉树的相关概念

    C语言中关于树和二叉树的相关概念 树的概念 在计算机科学中,树是一种非常常见的数据结构,它由一组节点(通常称为元素)和一组连接节点的边组成。树是一种无向的、连通的、无环的图形结构,其中有一个节点被称为根节点,它没有父节点,而其他节点都有一个父节点。 树的定义很抽象,但在程序设计中,我们通常会使用一个节点类来实现树结构。一个节点类通常包含两个元素:一个是表示当…

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部