Java数据结构之链表的增删查改详解

Java数据结构之链表的增删查改详解

简介

链表是非常常用的数据结构之一,它将数据储存在一个个结点中,每个结点存储了它所代表的数据和它下一个结点的指针,通过这些指针链接在一起,形成了一条链。

新建链表

// 定义链表中元素的结构
class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

// 新建一条链表
ListNode head = new ListNode(0);

在Java中,通过定义一个链表中“元素”的结构体ListNode,来定义每一个结点的数据和指针。新建一条链表时,需要新建一个虚拟的头结点head,它的val可以是任意值,next指针指向null。

插入结点

ListNode p = head;
ListNode newNode = new ListNode(1);
while (p.next != null) {
    p = p.next;
}
p.next = newNode;

新插入一个节点时,需要依次遍历链表,找到尾部结点,然后将新结点插入到尾部结点的next指针处。

删除结点

ListNode p = head;
while (p.next != null && p.next.val != val) {
    p = p.next;
}
if (p.next != null) {
    p.next = p.next.next;
}

删除一个节点时,需要依次遍历链表,找到要删除的结点的前一个结点,然后将前一个结点的next指向要删除结点的next,即可将要删除的结点删除。

查找结点

ListNode p = head;
while (p.next != null && p.next.val != val) {
    p = p.next;
}
if (p.next != null) {
    return p.next;
} else {
    return null;
}

查找一个节点时,需要依次遍历链表,查找与给定值相等的结点,然后返回该结点。

修改结点

ListNode p = head;
while (p.next != null && p.next.val != val) {
    p = p.next;
}
if (p.next != null) {
    p.next.val = newVal;
}

修改一个结点时,需要依次遍历链表,查找到需要修改的结点,然后将该结点的val值修改为新值。

示例

// 新建一条链表
ListNode head = new ListNode(0);

// 插入三个结点
ListNode p = head;
for (int i = 1; i <= 3; i++) {
    ListNode newNode = new ListNode(i);
    while (p.next != null) {
        p = p.next;
    }
    p.next = newNode;
}

// 修改第二个结点的值为4
p = head;
while (p.next != null && p.next.val != 2) {
    p = p.next;
}
if (p.next != null) {
    p.next.val = 4;
}

// 删除第三个结点
p = head;
while (p.next != null && p.next.val != 3) {
    p = p.next;
}
if (p.next != null) {
    p.next = p.next.next;
}

// 查找第二个结点
p = head;
while (p.next != null && p.next.val != 2) {
    p = p.next;
}
if (p.next != null) {
    System.out.println(p.next.val); // 输出4
}

以上示例代码新建一条链表并且插入三个结点,然后修改第二个结点的值为4,删除第三个结点,最后查找第二个结点并输出它的值。

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

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

相关文章

  • 环形队列的实现 [详解在代码中]

    1 package DataStructures.Queue.Array.Exerice; 2 3 /** 4 * @author Loe. 5 * @project DataStructures&Algorithms 6 * @date 2023/5/8 7 * @ClassInfo 环形队列 8 * 主要使用取模的特性来实现环形特征 9 */ 1…

    算法与数据结构 2023年5月8日
    00
  • java 数据结构之栈与队列

    Java 数据结构之栈与队列 什么是栈? 栈是一种根据先进后出(LIFO)原则的数据结构,即最后压入的元素最先弹出。栈可以用数组或链表实现。栈的两个基本操作是 push(入栈)和 pop(出栈)。 栈的特性 只允许在栈的顶部插入和删除元素。 操作受限只能从一端进行。 元素的插入和删除时间复杂度都为 O(1)。 栈的示例 以下是使用 Java 语言实现栈的示例…

    数据结构 2023年5月17日
    00
  • R语言数据结构之矩阵、数组与数据框详解

    R语言数据结构之矩阵、数组与数据框详解 在R语言中,矩阵、数组和数据框是常见的数据结构。本文将从定义、创建、访问和操作等方面详细讲解这些数据结构。 矩阵(matrix) 定义 矩阵是R语言中的一种二维数据结构,所有的元素都必须是同一类型的,并且矩阵中的行列数必须相同。矩阵可以使用matrix函数创建。 创建 # 创建一个3行4列的矩阵,所有元素都为0 mat…

    数据结构 2023年5月17日
    00
  • Java数据结构之顺序表的实现

    下面是“Java数据结构之顺序表的实现”的完整攻略: 标题:Java数据结构之顺序表的实现 一、什么是顺序表 顺序表是一种线性表结构,其数据元素在物理位置上是连续的,通过下标访问,具有随机访问的优点。 二、顺序表的实现 使用Java语言实现顺序表,需要定义以下三个类: 1. SeqList类 构造顺序表的数据结构,并定义了一些基本操作,如插入、删除、修改等。…

    数据结构 2023年5月17日
    00
  • C++ 数据结构超详细讲解顺序表

    C++ 数据结构:超详细讲解顺序表 什么是顺序表 顺序表是一种线性结构,它用一段地址连续的存储单元依次存储线性表中的各个元素。 顺序表的结构 顺序表由两部分组成,分别是元素存储区和表长度信息。元素存储区通常用数组实现,表长度信息记录表中元素的个数。 顺序表的操作 常见的顺序表操作包括: 初始化操作 插入操作 删除操作 查找操作 遍历操作 初始化顺序表 初始化…

    数据结构 2023年5月17日
    00
  • C++中的数组、链表与哈希表

    C++中的数组、链表与哈希表 数组 数组是一种数据结构,它存储的是一组相同类型的值。数组中每个元素的类型都是相同的,而且数组中的元素是按照一定的顺序排列的。C++中的数组是有序的,并且可以通过下标来访问数组中的元素。 数组的定义和初始化 在C++中定义数组的语法如下: type arr_name[arr_size]; 其中,type表示数组元素的类型,arr…

    数据结构 2023年5月17日
    00
  • java数据结构之树基本概念解析及代码示例

    Java数据结构之树基本概念解析及代码示例 树的基本概念 树(Tree)是一种非常重要的数据结构,它以“分支和层次”为特点,常用于组织数据,如目录结构、文件系统、网络结构等。 树是由节点(Node)构成的集合,其中有一个节点为根(Root),其他节点被称为子节点。每个节点都有一个父节点,除根节点外,每个节点可以有多个子节点。节点之间的关系称为边(Edge)。…

    数据结构 2023年5月16日
    00
  • Java 中很好用的数据结构(你绝对没用过)

    Java 中很好用的数据结构(你绝对没用过) 介绍 Java 中的数据结构有很多,比如数组、链表、栈、队列、堆、树等等。在这些常见的数据结构中,我们或多或少都会使用到。但是本篇文章要讲述的是一些比较冷门,但是很好用的数据结构。 双向队列(Deque) 双向队列,顾名思义,是一种可以双向操作的队列。它可以从队列的两端插入和删除元素,因此常被用作实现栈和队列以及…

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