Java链表数据结构及其简单使用方法解析

Java链表数据结构及其简单使用方法解析

概述

链表是一种非线性结构,由一系列节点按照顺序连接而成。每个节点由数据域和指针域组成,数据域用于存储数据,指针域用于指向下一个节点或者上一个节点。在Java中,链表有多种实现方式,常见的有单向链表、双向链表等。

单向链表的实现

以下是一个单向链表的实现代码示例:

public class Node {
    private int data; // 数据域
    private Node next; // 指针域

    public Node(int data) {
        this.data = data;
    }

    public void setNext(Node next) {
        this.next = next;
    }

    public Node getNext() {
        return next;
    }

    public int getData() {
        return data;
    }
}

public class LinkedList {
    private Node head; // 链表头节点

    public Node add(int data) { // 在链表末尾添加节点
        Node node = new Node(data);
        if (head == null) { // 如果链表为空,则将新节点作为头节点
            head = node;
        } else {
            Node current = head;
            while (current.getNext() != null) { // 找到链表末尾的节点
                current = current.getNext();
            }
            current.setNext(node); // 将新节点添加到链表末尾
        }
        return node; // 返回新节点
    }

    public void remove(int data) { // 移除某个节点
        if (head == null) {
            return;
        }

        if (head.getData() == data) { // 如果需要移除的节点是头节点
            head = head.getNext();
            return;
        }

        Node current = head;
        while (current.getNext() != null) { // 查找需要移除的节点
            if (current.getNext().getData() == data) {
                current.setNext(current.getNext().getNext());
                return;
            }
            current = current.getNext();
        }
    }
}

使用方式示例:

LinkedList list = new LinkedList();
list.add(1);
Node node = list.add(2);
list.add(3);
list.remove(2); // 移除节点2

双向链表的实现

以下是一个双向链表的实现代码示例:

public class DoubleNode {
    private int data; // 数据域
    private DoubleNode previous; // 上一个节点
    private DoubleNode next; // 下一个节点

    public DoubleNode(int data) {
        this.data = data;
    }

    public void setPrevious(DoubleNode previous) {
        this.previous = previous;
    }

    public DoubleNode getPrevious() {
        return previous;
    }

    public void setNext(DoubleNode next) {
        this.next = next;
    }

    public DoubleNode getNext() {
        return next;
    }

    public int getData() {
        return data;
    }
}

public class DoubleLinkedList {
    private DoubleNode head; // 链表头节点

    public DoubleNode add(int data) { // 在链表末尾添加节点
        DoubleNode node = new DoubleNode(data);
        if (head == null) { // 如果链表为空,则将新节点作为头节点
            head = node;
        } else {
            DoubleNode current = head;
            while (current.getNext() != null) { // 找到链表末尾的节点
                current = current.getNext();
            }
            current.setNext(node); // 将新节点添加到链表末尾
            node.setPrevious(current); // 设置新节点的上一个节点
        }
        return node; // 返回新节点
    }

    public void remove(int data) { // 移除某个节点
        if (head == null) {
            return;
        }

        if (head.getData() == data) { // 如果需要移除的节点是头节点
            head = head.getNext();
            if (head != null) {
                head.setPrevious(null); // 设置新头节点的上一个节点为null
            }
            return;
        }

        DoubleNode current = head;
        while (current.getNext() != null) { // 查找需要移除的节点
            if (current.getNext().getData() == data) {
                current.setNext(current.getNext().getNext());
                if (current.getNext() != null) {
                    current.getNext().setPrevious(current); // 设置下一个节点的上一个节点为当前节点
                }
                return;
            }
            current = current.getNext();
        }
    }
}

使用方式示例:

DoubleLinkedList list = new DoubleLinkedList();
list.add(1);
list.add(2);
DoubleNode node = list.add(3);
list.remove(2); // 移除节点2

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java链表数据结构及其简单使用方法解析 - Python技术站

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

相关文章

  • PHP 数据结构 算法 三元组 Triplet

    PHP 数据结构 算法 三元组 Triplet 什么是三元组 Triplet 三元组 Triplet 是指由三个数据分别确定一个元素的数据类型。 在 PHP 中可以用一个数组来实现三元组,数组下标表示元素的序号,数组中储存的则是元素的值,共有三个元素。 例如一个三元组 (a, b, c),可以用 PHP 数组表示为 $triplet = array(a, b…

    数据结构 2023年5月17日
    00
  • C++语言数据结构 串的基本操作实例代码

    下面是“C++语言数据结构 串的基本操作实例代码”的完整攻略。 什么是串 在计算机领域中,串是由一系列字符组成的数据结构。可以将其理解为一个字符数组,每个字符处于数组中的一个位置,并且可以通过下标位置访问对应的字符。 C++中的串类型可以使用字符数组来表示,另外还有标准库中的string类型。 基本操作 下面是实现串的基本操作的示例代码,并进行了详细的解释。…

    数据结构 2023年5月17日
    00
  • java数据结构基础:线性表

    Java数据结构基础:线性表 简介 线性表是指数据元素之间存在线性关系的数据结构,即数据元素之间有前后直接关系,且第一个元素没有前驱,最后一个元素没有后继。线性表可以用数组或者链表两种方式实现。 数组实现线性表 线性表的数组实现即为将线性表中的元素放在一个一维数组中,使用数组下标表示元素的位置。由于数组随机访问元素的时间复杂度为O(1),因此在随机访问比较多…

    数据结构 2023年5月17日
    00
  • Java数据结构之图(动力节点Java学院整理)

    Java数据结构之图是动力节点Java学院整理的一篇关于图的攻略教程,该教程包含以下主要内容: 一、图的定义 图是由若干个顶点以及它们之间的相互关系所构成的数学模型。它包含了许多实际生活中的应用,如社交网络、地图、电子邮件网络等。 二、图的存储方式 图的存储方式有两种:邻接矩阵和邻接表。 邻接矩阵 邻接矩阵以二维数组的形式存储图。对于有n个顶点的图,其邻接矩…

    数据结构 2023年5月17日
    00
  • Java常见基础数据结构

    Java常见基础数据结构攻略 Java是一种面向对象的编程语言,拥有丰富的数据结构,大多数基础数据结构都包含在Java API中。在本文中,我们将讨论Java中常见的基础数据结构,包括数组、链表、栈、队列、集合和映射。我们将探讨每种数据结构的定义、用法和基本操作,并提供两个示例说明。 数组 数组是Java中最基本的数据结构之一。它是一个有序的集合,可以包含任…

    数据结构 2023年5月17日
    00
  • C++数据结构之链表详解

    C++数据结构之链表详解 链表是一种重要的数据结构,它可以动态的分配内存空间,实现灵活的元素插入,删除等操作。本文将详细讲解链表的定义、实现、常见操作以及链表的应用。 定义与特点 链表是一种线性表数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表分为单向链表和双向链表,其中单向链表的每个节点只包含一个指针,指向下一个节点,而双向链表的每…

    数据结构 2023年5月17日
    00
  • Java数据结构的十大排序

    Java数据结构的十大排序攻略 简介 在计算机科学中,排序算法是一种将一串数据按照特定顺序进行排列的方法,其中常见的排序算法有很多种,不同的算法适用于不同的数据类型和数据规模。Java是一种常见的编程语言,也提供了很多实现排序算法的类和方法。 本文将介绍Java数据结构的十大排序算法,分别为:插入排序、希尔排序、选择排序、冒泡排序、快速排序、归并排序、堆排序…

    数据结构 2023年5月17日
    00
  • 线段树好题! P2824 [HEOI2016/TJOI2016]排序 题解

    题目传送门 前言 线段树好题!!!!咕咕了挺久的一道题目,很早之前就想写了,今天终于找了个时间A掉了。 题意 给定一个 \(1\) 到 \(n\) 的排列,有 \(m\) 次操作,分两种类型。1.0 l r表示将下标在 \([l, r]\) 区间中的数升序排序。2.1 l r表示将下标在 \([l, r]\) 区间中的数降序排序。给定一个数 \(q\) 询问…

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