Java 单链表数据结构的增删改查教程

Java 单链表数据结构的增删改查教程

什么是单链表

单链表是一种常用的线性表,是链式存储结构,由多个结点组成,每个结点包含数据域和指针域,指针域指向下一个结点。单链表的优势在于可以在任意位置进行元素的插入和删除操作,但是在查询某个元素时,需要从头结点依次遍历,效率较低。

节点

单链表中的每一个元素称为节点,使用Java类进行表示

class Node {
    int val;  // 节点存储的元素值
    Node next; // 指向下一个节点的指针

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

创建链表

创建一个单链表需要一个头结点,头结点不存储任何元素值,只是为了方便操作。

class LinkedList {
    Node head; // 头结点

    public LinkedList() {
        this.head = new Node(0); // 初始化头结点
    }
}

插入节点

在单链表中插入一个元素需要知道要插入的位置和元素的值。插入操作的指针操作很重要,因为没有指针指向前一个节点,所以需要将待插入节点的指针指向下一个节点。

public void add(int val) {
    Node node = new Node(val);
    Node cur = head;
    while (cur.next != null) {
        cur = cur.next;
    }
    cur.next = node;
}

将一个节点插入某个位置时,需要先找到要插入位置的前一个节点,然后将它的指针指向新节点,新节点的指针指向后一个节点。

public void add(int index, int val) {
    Node node = new Node(val);
    Node cur = head;
    for (int i = 0; i < index; i++) {
        cur = cur.next;
    }
    node.next = cur.next;
    cur.next = node;
}

示例:

LinkedList list = new LinkedList();
list.add(1);
list.add(3);
list.add(2);
list.add(4);
list.add(0, 5); // 在第一个位置插入元素5

删除节点

删除单链表中的一个元素需要知道要删除元素的位置,需要将该节点的前一个节点的指针指向该节点的后一个节点。

public void remove(int index) {
    Node cur = head;
    for (int i = 0; i < index; i++) {
        cur = cur.next;
    }
    cur.next = cur.next.next;
}

示例:

LinkedList list = new LinkedList();
list.add(1);
list.add(3);
list.add(2);
list.add(4);
list.remove(2); // 删除第三个元素

查询节点

查询单链表中的一个元素需要从头结点开始遍历,直到找到要查询的元素。如果单链表非常长,效率就会非常低。

public Node search(int val) {
    Node cur = head;
    while (cur.next != null) {
        cur = cur.next;
        if (cur.val == val) {
            return cur;
        }
    }
    return null;
}

示例:

LinkedList list = new LinkedList();
list.add(1);
list.add(3);
list.add(2);
list.add(4);
Node node = list.search(3); // 查询元素3

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 单链表数据结构的增删改查教程 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • win10恢复win7无限重启怎么解决?

    下面是详细的“Win10恢复Win7无限重启怎么解决?”攻略: 问题描述 当用户将Windows 7 PC升级到Windows 10时,可能会出现无限重启的问题。 在这种情况下,用户可能面临无法使用PC的局面,因为PC会在启动过程中无限重启。 解决这个问题可以通过以下步骤来完成: 步骤一:进入安全模式 用户需要进入安全模式并禁用自动重启设置。 此时,PC将在…

    other 2023年6月26日
    00
  • 3.8版QQ影音更新了什么内容?附下载地址

    QQ影音3.8版更新内容攻略 QQ影音是一款功能强大的多媒体播放器,它提供了丰富的功能和优化的用户体验。最新的3.8版更新带来了一些令人兴奋的新功能和改进。以下是3.8版QQ影音的更新内容攻略: 1. 新增功能 1.1 视频下载功能 QQ影音3.8版新增了视频下载功能,使用户能够方便地下载他们喜欢的在线视频。用户只需复制视频链接,然后在QQ影音中选择下载,即…

    other 2023年8月4日
    00
  • PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)

    PHP入门教程之面向对象的特性分析 在PHP中,面向对象是非常重要的编程范式,现在我们来学习一下面向对象的几个重要特性:继承、多态、接口、抽象类、抽象方法。 继承 继承是面向对象程序设计中的一个重要特性,它允许一个类继承另一个类的公有和保护的成员属性和成员方法。子类继承父类的时候,可以直接使用父类的方法和属性。在PHP中,可以使用以下的语法来实现继承: cl…

    other 2023年6月27日
    00
  • 在win8.1上玩GTA4 无法识别双显卡的分析和解决方案

    下面是在win8.1上玩GTA4无法识别双显卡的分析和解决方案的完整攻略: 问题分析 在win8.1上玩GTA4时,有用户反映游戏无法识别双显卡,导致游戏画质较差、卡顿等问题。这是因为某些游戏无法识别双显卡的正确驱动程序,从而导致游戏无法充分利用双显卡的性能。 解决方案 方法一:使用可能的兼容模式启动游戏 在此情况下,您可以尝试使用可能的兼容模式启动游戏,这…

    other 2023年6月26日
    00
  • Docker 部署 Mysql8.0的方法示例

    Docker部署MySQL 8.0的方法示例 本文将详细讲解如何使用Docker部署MySQL 8.0,并提供两个示例说明。 步骤1:安装Docker 首先,确保您的系统已经安装了Docker。您可以根据您的操作系统类型,按照官方文档的指引进行安装。 步骤2:拉取MySQL 8.0镜像 在终端或命令行中执行以下命令,拉取MySQL 8.0的Docker镜像:…

    other 2023年10月18日
    00
  • JavaScript实现从数组中选出和等于固定值的n个数

    下面是JavaScript实现从数组中选出和等于固定值的n个数的完整攻略: 问题描述 假设有一个数组arr和一个固定值target,如何从arr中选出n个数,使得这n个数的和等于target。 解决方案 1. 暴力破解 最简单粗暴的方法当然是暴力破解,即枚举所有的 n 个数的组合情况,计算它们的和,如果等于 target,则返回这个组合。但其时间复杂度为O(…

    other 2023年6月25日
    00
  • C语言数据结构系列篇二叉树的遍历

    C语言数据结构系列篇:二叉树的遍历 二叉树(Binary Tree)是一种树形结构,它由一个根节点和两个子树组成,这两个子树都是二叉树,被称为左子树和右子树。二叉树有许多用途,例如用来存储有序列表或具有层级关系的信息等等。本篇将详细讲解二叉树的遍历。 二叉树的遍历 二叉树的遍历即将二叉树中的节点按照某种顺序,一次访问每一个节点。常见的二叉树遍历方式有前序遍历…

    other 2023年6月27日
    00
  • AngularJS入门心得之directive和controller通信过程

    当然!下面是关于\”AngularJS入门心得之directive和controller通信过程\”的完整攻略,包含两个示例说明。 directive和controller通信过程 在AngularJS中,directive和controller之间的通信可以通过多种方式实现。下面是一种常见的通信方式: 在directive中使用require选项:在dir…

    other 2023年8月20日
    00
合作推广
合作推广
分享本页
返回顶部