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

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日

相关文章

  • ecnuoj 5042 龟速飞行棋

    5042. 龟速飞行棋 题目链接:5042. 龟速飞行棋 赛中没过,赛后补题时由于题解有些抽象,自己写个题解。 可以发现每次转移的结果只跟后面两个点的胜负状态有关。 不妨设 \(f_{u,a,b}\) 表示,\(u+1\) 号点的胜负态为 \(a\),\(u+2\) 号点的胜负态为 \(b\),此时从 \(1\) 号点出发的胜负态是什么。那么可以发现,利用 …

    算法与数据结构 2023年4月17日
    00
  • 图计算引擎分析–GridGraph

    作者:京东科技 李永萍 GridGraph:Large-Scale Graph Processing on a Single Machine Using 2-Level Hierarchical Partitioning 图计算框架 图计算系统按照计算方式划分可分为:单机内存图处理系统,单机核外图处理系统,分布式内存图处理系统,分布式核外图处理系统。本文将详…

    算法与数据结构 2023年4月20日
    00
  • 数据结构中的各种排序方法小结(JS实现)

    数据结构中的各种排序方法小结(JS实现) 本文将介绍常见的八种排序算法: 冒泡排序 插入排序 选择排序 快速排序 归并排序 堆排序 希尔排序 计数排序 下面进行详细讲解。 冒泡排序 冒泡排序是一种简单的排序算法,它重复地遍历数组,比较相邻的两个元素,并按大小交换位置,一直到整个数组排序完成。它的时间复杂度为O(n^2)。 示例代码: function bub…

    数据结构 2023年5月17日
    00
  • MySQL索引背后的数据结构及算法原理详解

    《MySQL索引背后的数据结构及算法原理详解》是一篇介绍MySQL索引背后的数据结构和算法原理的文章。MySQL索引是提高查询效率的一个重要工具,理解其背后的数据结构和算法原理对于提高数据库性能和优化查询操作是非常有帮助的。 本文主要分为以下三部分: MySQL索引背后的数据结构 索引的几种常见数据结构及其优缺点 索引的算法原理 MySQL索引背后的数据结构…

    数据结构 2023年5月17日
    00
  • JavaScript树形数据结构处理

    对于“JavaScript树形数据结构处理”的完整攻略,我将从以下几个方面进行讲解: 树形数据结构的简介 树形数据结构在JavaScript中的表示 树形数据结构的处理方法 示例说明 树形数据结构的简介 树形数据结构,是一种常见的数据结构,由多个节点组成,每个节点有一个父节点和多个子节点。树形数据结构通常用来表示层级关系的数据。 树形数据结构在JavaScr…

    数据结构 2023年5月17日
    00
  • C++数据结构与算法之反转链表的方法详解

    C++数据结构与算法之反转链表的方法详解 在C++中,反转链表是一种常见的数据结构与算法技巧。在本文中,我们将详细讲解反转链表的实现过程以及常见的两种反转方法。 基本定义 在开始讲述反转链表算法之前,我们先介绍一下链表的基本定义。 链表是一种数据结构,其中每个节点包含一个数据元素和一个指向下一个节点的指针。下面是一个简单的链表的节点结构定义: struct …

    数据结构 2023年5月17日
    00
  • C++ 数据结构之kmp算法中的求Next()函数的算法

    C++ 数据结构之kmp算法中的求Next()函数的算法 什么是KMP算法和Next()函数 KMP算法(Knuth-Morris-Pratt算法)是一种字符串匹配算法,能够解决的问题是,在一个文本串S中查找一个模式串P是否出现并且返回第一次出现的位置。而Next()函数则是在KMP算法中使用的一个关键的子函数,用于计算模式串P中每个前缀的最长相同真前缀和后…

    数据结构 2023年5月17日
    00
  • qqwry.dat的数据结构图文解释第1/2页

    “qqwry.dat的数据结构图文解释第1/2页”的完整攻略 1. 什么是qqwry.dat? qqwry.dat是一个IP地址库,包含了全球的IP地址信息,例如:所属国家、所属地区、详细地址等信息。在大多数系统或应用程序中,都可以使用qqwry.dat来查询IP地址信息。 2. qqwry.dat的数据结构 qqwry.dat的数据结构可以通过两个文件来描…

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