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日

相关文章

  • golang优先级队列的实现全过程

    下面是关于”golang优先级队列的实现全过程”的详细讲解。 什么是优先级队列? 优先级队列是一种常用的数据结构,它可以帮我们按照一定规则(即优先级)将元素按照大小排序,并支持快速插入、删除和查询最大或最小的元素等操作。我们可以将优先级队列想象成一个具有优先级的、自动排序的队列,其中优先级高的元素(比如数字大的元素)排在前面,优先级低的元素(比如数字小的元素…

    数据结构 2023年5月17日
    00
  • MySQL 数据库的基础知识

    下面是针对MySQL数据库基础知识的攻略。 什么是MySQL MySQL是一种常用的开源的关系型数据库管理系统 (RDBMS),通常被用于网站开发、数据储存和其他广泛的应用领域。 安装MySQL 要使用MySQL,需要首先在你的电脑上安装它。MySQL在Windows、macOS和Linux系统上都有提供安装文件,你可以前往MySQL官网下载安装器按步骤完成…

    数据结构 2023年5月17日
    00
  • 详解python数据结构之栈stack

    详解Python数据结构之栈stack 什么是栈stack 栈是一种先进后出(LIFO)的数据结构,只允许在表的一端进行插入和删除操作。栈的入口称为栈底,出口称为栈顶。栈常用于表达式求值、函数调用等场景。 栈的操作 栈的基本操作包括入栈(push)和出栈(pop)。其他常用的操作有判断栈是否为空(isEmpty)、获取栈的大小(size)和获取栈顶元素(pe…

    数据结构 2023年5月17日
    00
  • Mysql Innodb存储引擎之索引与算法

    Mysql Innodb存储引擎之索引与算法 MySQL是一款非常受欢迎的关系型数据库,有许多的存储引擎可供选择,其中InnoDB是目前最受欢迎的存储引擎之一。索引是InnoDB存储引擎的一个重要特性,它可以大大提高数据库查询的效率。本文将详细讲解InnoDB存储引擎的索引与算法。 索引 索引是一种数据结构,它将表中的列与对应的行位置组成键值对,以便快速查找…

    数据结构 2023年5月17日
    00
  • C++ 数据结构二叉树(前序/中序/后序递归、非递归遍历)

    下面是关于C++二叉树数据结构的详细攻略。 什么是二叉树 二叉树是一种树形数据结构,每个节点最多有两个子节点:左节点和右节点。一个节点没有左节点或右节点则分别为左子树和右子树为空。 递归遍历二叉树 前序遍历 前序遍历是指对于一棵二叉树,在访问右子树之前,先访问根节点,然后访问左子树。 下面是C++递归遍历二叉树的前序遍历示例代码: template <…

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

    首先,对于“qqwry.dat的数据结构图文解释第2/2页”这个主题,我们需要先对其进行一些介绍。 qqwry.dat是一种IP地址转换工具,它可以将一个给定的IP地址转换成一个物理地址。它的数据结构是一种二叉查找树,在此二叉查找树中每个节点保存了一个IP地址段和该段IP地址所对应的物理地址的信息。这个数据结构的结构图可以在“qqwry.dat的数据结构图文…

    数据结构 2023年5月17日
    00
  • 二叉搜索树的本质

    引言 打算写写树形数据结构:二叉查找树、红黑树、跳表和 B 树。这些数据结构都是为了解决同一个基本问题:如何快速地对一个大集合执行增删改查。 本篇是第一篇,讲讲搜索树的基础:二叉搜索树。 基本问题 如何在一千万个手机号中快速找到 13012345432 这个号(以及相关联信息,如号主姓名)? 最笨的方案 把一千万个手机号从头到尾遍历一遍,直到找到该手机号,返…

    算法与数据结构 2023年4月17日
    00
  • C语言植物大战数据结构快速排序图文示例

    C语言植物大战数据结构的快速排序可以分为以下步骤: 准备工作 首先需要定义一个关于植物大战中植物的结构体,例如: struct Plant { int hp; int atk; int cost; }; 然后准备一个装载植物信息的数组: struct Plant plants[] = { {75, 36, 100}, {100, 20, 50}, {125,…

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