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

yizhihongxing

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日

相关文章

  • windows开发记事本程序纪实(一)界面篇

    Windows开发记事本程序纪实(一)界面篇 界面设计 在这篇文章中,我将介绍如何使用C#语言开发Windows记事本程序的界面设计。 界面元素 记事本程序的界面主要由以下元素组成: 菜单栏 工具栏 状态栏 编辑区域 菜单栏和工具栏是记事本程序的主要功能区域,状态栏用于显示程序当前状态,编辑区域则是用户输入和显示文本的地方。 菜单栏设计 首先,我们需要设计记…

    other 2023年6月25日
    00
  • Python实现合并两个有序链表的方法示例

    Python实现合并两个有序链表的方法示例 当我们需要将两个有序链表合并成一个新的有序链表时,可以采用一些算法来实现。下面将详细讲解Python实现合并两个有序链表的方法示例如下: 方法一:递归实现 在递归调用过程中,我们需要判断两个链表中第一个节点的大小,并将小的节点作为合并后链表的头节点,并将该节点的next指针指向递归调用返回的node。 class …

    other 2023年6月27日
    00
  • word2pdf

    Word转PDF Word转PDF是一种将Word文档转换为PDF格式的方法,它可以帮助我们更方便地共享和打印文档。以下是Word转PDF的完整攻略。 步骤 以下是Word转PDF的步骤: 打开Word文档。 点击“文件”菜单选择“另存为”。 在“文件类型”下拉菜单中选择“PDF”。 点击“保存”按钮,将Word文档保存为PDF格式。 示例 以下是两个示例,…

    other 2023年5月6日
    00
  • xftp的使用教程

    以下是“Xftp的使用教程的完整攻略”的详细说明,包括过程中的两个示例说明。 Xftp的使用教程 Xftp是一款Windows平台下的SFTP、FTP客户端软件,可以用于文件传输和管理。以下是一份关于Xftp的使用教程。 1. Xftp基础知识 在开始使用Xftp之前,我们需要掌握一些基础知识,例如: SFTP、FTP协议的基础知识,包括协议的特点、使用场景…

    other 2023年5月10日
    00
  • 如何免费下载付费音乐歌曲 6个网站+8个app

    如何免费下载付费音乐歌曲 6个网站+8个app 付费音乐下载是一种非常方便的方式来获取最新的音乐,但是很多人不愿意为此花费额外的费用。在这篇文章中,我们将会介绍6个免费下载付费音乐的网站和8个应用程序,可以让您轻松地获得您想要的音乐! 免费下载付费音乐的网站 1. MP3 Juice MP3 Juice 是一个流行的免费下载音乐的网站。它可以下载来自 You…

    其他 2023年3月29日
    00
  • css背景图片拉伸以及100%满屏显示

    以下是“CSS背景图片拉伸以及100%满屏显示的完整攻略”的标准markdown格式文本,其中包含了两个示例说明: CSS背景图片拉伸以及100%满屏显示 在Web开发中,背景图片是一个常见的元素。然而,如何让背景图片拉伸以及100%满屏显示是一个常见的问题。本文将介绍如何使用CSS实现背景图片拉伸以及100%满屏显示,包括如何使用background-si…

    other 2023年5月10日
    00
  • CSS作用域(样式分割)的使用汇总

    CSS作用域(样式分割)的使用汇总 CSS作用域(样式分割)是一种技术,用于将CSS样式限定在特定的范围内,以避免样式冲突和污染全局命名空间。以下是CSS作用域的使用汇总,包括两个示例说明。 1. 使用CSS Modules CSS Modules是一种流行的CSS作用域解决方案,它通过在类名中添加哈希值来确保样式的唯一性。以下是使用CSS Modules的…

    other 2023年8月19日
    00
  • xhost配置的是当前终端环境变量display

    xhost配置的是当前终端环境变量display 概述 在 Linux/Unix 系统中,xhost 命令用于控制 X Windows 系统下的访问控制,通过设置该命令可以限制远程主机访问当前主机的 X 服务。同时,它还可以配置当前终端环境变量 display,从而控制 X11 系统的显示。 语法 xhost 命令的通用语法如下所示: xhost [+|-]…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部