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

yizhihongxing

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日

相关文章

  • Java中使用数组实现栈数据结构实例

    下面是Java中使用数组实现栈数据结构实例的完整攻略: 步骤一:定义栈类 我们可以通过定义一个名为 Stack 的类来创建栈类,其中包含以下属性: 一个整型的变量 top,用于存储当前栈顶的位置 一个整型的数组 items,用于存储栈中的元素 一个整型的变量 capacity,用于表示栈的容量 代码如下所示: public class Stack { pri…

    数据结构 2023年5月17日
    00
  • java数据结构基础:算法

    Java数据结构基础:算法攻略 概述 在程序员的日常开发中,算法是一项重要的技能,而数据结构则是算法不可缺少的基础。本文将讲解Java数据结构中的基本算法,包括常见算法的实现,算法的分析及算法的运用。经过本文的学习,读者可以掌握Java中基础的算法实现及应用。 常见算法实现 排序算法 排序算法是算法中最基础的一类,常用的算法有冒泡排序、插入排序、选择排序、快…

    数据结构 2023年5月17日
    00
  • Python 实现数据结构-堆栈和队列的操作方法

    Python 实现数据结构-堆栈和队列的操作方法 在Python中,我们可以使用列表(List)数据类型来实现堆栈和队列的操作。 堆栈(Stack)的操作方法 堆栈数据结构可以理解为一种后进先出的数据存储方式,也就是说最后放入堆栈的元素最先被取出。下面介绍一下堆栈的操作方法。 创建一个堆栈 我们可以通过创建一个空的列表来实现一个堆栈。代码如下: stack …

    数据结构 2023年5月17日
    00
  • C语言 超详细总结讲解二叉树的概念与使用

    C语言 超详细总结讲解二叉树的概念与使用 1. 什么是二叉树? 二叉树是一种树状数据结构,其中每个节点最多有两个子节点,被称为左子节点和右子节点。具有以下几个特点: 每个节点最多有两个子节点; 左子节点可以为空,右子节点也可以为空; 二叉树的每个节点最多有一个父节点; 二叉树通常定义为递归模式定义,即每个节点都可以看做一棵新的二叉树。 2. 二叉树的遍历方式…

    数据结构 2023年5月17日
    00
  • Go select使用与底层原理讲解

    标题:Go select使用与底层原理讲解 标准库提供的go语言引擎的选择器select语法是并发编程中常用的语法之一,它允许协程同时等待多个IO操作的完成,通常会和通道配合使用。在本文中,我们将详细讲解Go select的使用和底层原理。 Go select的使用 基本语法 在Go语言中,select语法的基本语法如下: select { case &lt…

    数据结构 2023年5月17日
    00
  • JavaScript 处理树数据结构的方法示例

    下面是“JavaScript 处理树数据结构的方法示例”的完整攻略。 什么是树数据结构 树形数据结构是一种非常重要的数据结构,常被用于模拟现实中大量的层级结构。例如:文件目录、网站导航等。其是由一个根节点和若干个子节点构成的,每个节点可以有0个或多个子节点。 使用 JavaScript 处理树形数据结构 了解了树形数据结构后,我们可以使用 JavaScrip…

    数据结构 2023年5月17日
    00
  • C语言超详细讲解双向带头循环链表

    C语言双向带头循环链表 基本概念 带头双向循环链表是指在双向循环链表的基础上,在头节点前面添加一个头结点。这个头结点不存储任何数据,只是为了方便对链表进行操作。循环链表则是在单向或双向链表的基础上,使链表的头节点与尾节点相连,形成一个环。 综合这两种链表,就构成了“双向带头循环链表”这种数据结构。双向带头循环链表是一种灵活性较高的数据结构,支持前插、后插、前…

    数据结构 2023年5月17日
    00
  • Huffman实现

    Huffman编码树 秒懂:【算法】Huffman编码_哔哩哔哩_bilibili 约定:字符x的编码长度 就是其对应叶节点的深度; 在一个字符集中,每个字符出现的次数有多有少,那么若都采用固定长度编码的话,那么编码长度会非常大,并且搜索时间复杂度都非常高;若采用非固定编码,出现次数多的字符编码长度小一些,并且放在树深度小的地方,提高搜索时间效率;这样带权平…

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