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日

相关文章

  • LCA——ST表+欧拉序

    了解到一个quan新的东西: 用ST表(欧拉序)实现LCA(树上最近公共祖先) 欧拉序 前序遍历得到的序列,叫dfs序但数字可以重复出现,一进一出,叫欧拉序会发现根结点总在中间而根结点是该段序列深度最小的点因此两个点的LCA,就是在该序列上两个点第一次出现的区间内深度最小的那个点 即转化为区间RMQ问题,可以用ST表当然你可以再写一棵线段树(如果有修改操作)…

    算法与数据结构 2023年5月4日
    00
  • ecnuoj 5039 摇钱树

    5039. 摇钱树 题目链接:5039. 摇钱树 感觉在赛中的时候,完全没有考虑分数规划这种做法。同时也没有想到怎么拆这两个交和并的式子。有点难受…… 当出现分数使其尽量大或者小,并且如果修改其中直接相关的某个值会导致分子分母同时变化的时候,还是要多想想分数规划的做法。 下面引用一下题解 另外这两个交和并的式子,令 \(a = S \and T, b = T…

    算法与数据结构 2023年4月17日
    00
  • 第14届蓝桥杯C++B组省赛题解(A-J)(更新完毕)

    目录 A. 日期统计 题目内容 思路 代码 答案 B.01 串的熵 题目内容 思路 代码 答案 C.冶炼金属 题目内容 输入格式 输出格式 输入样例 输出样例 思路 代码 D.飞机降落 题目内容 输入格式 输出格式 输入样例 输出样例 思路 代码 E.接龙数列 题目内容 输入格式 输出格式 输入样例 输出样例 思路 代码 F.岛屿数量 题目内容 输入格式 输…

    算法与数据结构 2023年4月25日
    00
  • redis中hash数据结构及说明

    Redis中Hash数据结构及说明 简介 Redis中的Hash是一个string类型的field和value的映射表,可以将多个键值对存储在一个数据结构中,适合于存储对象。 通过HASH数据结构,我们可以方便的对单个field进行增删改查操作,增加了程序编写的方便性。 命令 以下是Hash数据结构的基础命令: HSET 将哈希表 key 中的域 field…

    数据结构 2023年5月17日
    00
  • 数位dp

    数位dp 思想 一般来说,题目是要求在区间\([l,r]\)中符合某一种条件的数的个数 我们用前缀和的思想考虑,分别求出\([1,r]\)和\([1,l-1]\)中数的个数相减即为所求 这里采用记忆化搜索的方式实现 模板 #include<iostream> #include<cstring> #include<vector&g…

    算法与数据结构 2023年4月17日
    00
  • JavaScript的Set数据结构详解

    JavaScript中的Set数据结构详解 什么是Set? Set 是一种 Javascript 内置的数据结构。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set 本身是一个构造函数,可以通过new关键字来创建 Set 数据结构。 let mySet = new Set(); Set的基本用法 Set实例对象有以下常用方法: add(value):…

    数据结构 2023年5月17日
    00
  • Codeforces Round 866 (Div. 2)

    A. Yura’s New Name 题意: 给出一个仅由_或^组成的字符串,你可以在任意位置添加_或^字符,使得字符串满足:任意字符要么属于^_^的一部分,要么属于^^的一部分。求最少添加的字符数量。 分析: 对于_我们只需处理没有组成^_^的_: ①如果_在首位置且左边没有^则添加^ ②如果_在尾位置且右边没有^则添加^ ③如果_在中间部分且右边没有^则…

    算法与数据结构 2023年4月25日
    00
  • Java数据结构之有向图的拓扑排序详解

    下面我将为您详细讲解“Java数据结构之有向图的拓扑排序详解”的完整攻略。 拓扑排序概述 拓扑排序是一种常见的有向无环图(DAG)的排序方法,该算法将DAG图中所有节点排序成一个线性序列,并且使得所有的依赖关系都满足从前向后的顺序关系。一般来说,DAG图的所有节点可以表示为一个任务依赖关系,而拓扑排序则可以对这些任务进行排序,确保每个任务在它所依赖的任务之后…

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