java实现单链表中的增删改

让我们来讲解一下Java实现单链表中的增删改的完整攻略。

一、单链表概述

单链表是一种线性数据结构,它是由若干个节点组成,每个节点包含两部分,一部分是存储数据的元素,另一部分是指向下一个节点的指针。单链表的头节点没有前驱节点,尾节点没有后继节点。

单链表常用的操作有插入、删除、修改和查询,其中插入和删除操作是单链表的核心操作。

二、Java单链表实现

下面我们来介绍Java中单链表的实现方式。

1. 节点类的定义

单链表的节点类定义包含两个属性:data(存储节点的值),next(存储指向下一个节点的指针)。

public class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

2. 增加节点

单链表的插入操作分为头部插入、尾部插入、中间插入三种情况。

2.1 头部插入

在链表头部添加节点。

public void addFirst(int val) {
    ListNode node = new ListNode(val);
    node.next = head;
    head = node;
}

2.2 尾部插入

在链表尾部添加节点。

public void addLast(int val) {
    ListNode node = new ListNode(val);
    if (head == null) {
        head = node;
    } else {
        ListNode p = head;
        while (p.next != null) {
            p = p.next;
        }
        p.next = node;
    }
}

2.3 中间插入

在链表中间添加节点。

public void addAtPosition(int val, int position) {
    ListNode node = new ListNode(val);
    ListNode p = head;
    for (int i = 1; i < position; i++) {
        p = p.next;
        if (p == null) {
            return; // 无法插入
        }
    }
    node.next = p.next;
    p.next = node;
}

3. 删除节点

单链表的删除操作也分为头部删除、尾部删除和中间删除三种情况。

3.1 头部删除

删除链表头部节点。

public void deleteFirst() {
    if (head != null) {
        head = head.next;
    }
}

3.2 尾部删除

删除链表尾部节点。

public void deleteLast() {
    if (head == null) {
        return;
    } else if (head.next == null) {
        head = null;
    } else {
        ListNode p = head;
        while (p.next.next != null) {
            p = p.next;
        }
        p.next = null;
    }
}

3.3 中间删除

删除链表中间节点。

public void deleteAtPosition(int position) {
    if (position == 1) {
        deleteFirst();
        return;
    }
    ListNode p = head;
    ListNode q = null;
    for (int i = 1; i < position; i++) {
        if (p == null) {
            return;
        }
        q = p;
        p = p.next;
    }
    if (p == null) {
        return;
    }
    q.next = p.next;
}

4. 修改节点

修改链表中指定位置节点的值。

public void update(int position, int val) {
    ListNode p = head;
    for (int i = 1; i <= position; i++) {
        if (p == null) {
            return;
        }
        p = p.next;
    }
    if (p == null) {
        return;
    }
    p.val = val;
}

三、示例说明

1. 插入操作

如下面代码所示,我们创建一个单链表,先在链表头部插入一个节点,再在链表尾部插入一个节点,最后在链表特定位置插入一个节点,这个位置是链表第三个节点。

ListNode head = new ListNode(1);
head.addFirst(0);
head.addLast(3);
head.addAtPosition(2, 3);

插入完的单链表如下所示:

0 -> 1 -> 2 -> 3

2. 删除操作

如下面代码所示,我们删除刚才创建的单链表中的节点,先删除链表头部节点,再删除链表尾部节点,最后删除链表第二个节点。

head.deleteFirst();
head.deleteLast();
head.deleteAtPosition(2);

删除完的单链表如下所示:

0 -> 3

3. 修改操作

如下面代码所示,我们修改刚才创建的单链表中的节点值,将链表第二个节点的值修改为“2”。

head.update(2, 2);

修改完的单链表如下所示:

0 -> 2 -> 3

以上就是Java实现单链表中的增删改的完整攻略,希望对您有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现单链表中的增删改 - Python技术站

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

相关文章

  • Java比较对象大小两种常用方法

    Java中比较对象大小的方式主要有两种方法,分别是 Comparable 和 Comparator 接口。 Comparable 接口比较对象大小 Comparable 接口是 Java 自带的一个接口,它定义了对象的自然顺序。如果我们需要对一个类实例进行排序或者比较大小,那么就需要让这个类实现 Comparable 接口,并重写 compareTo 方法。…

    Java 2023年5月26日
    00
  • Java基础之文件和目录操作

    Java基础之文件和目录操作 在Java中,文件和目录操作是很常见的任务。Java提供了一系列的类和方法来实现这些操作。本文将介绍Java中文件和目录的基础操作。 文件基础操作 创建文件 在Java中,使用File类来创建文件。可以通过以下代码创建一个新的文件: File file = new File("example.txt"); t…

    Java 2023年6月1日
    00
  • SpringBoot中使用Ehcache的详细教程

    下面我来为您详细讲解“SpringBoot中使用Ehcache的详细教程”。 简介 Ehcache是一个流行的开源缓存解决方案,它提供了多级缓存机制、内存缓存和磁盘缓存等多种缓存策略,并具有快速、灵活、可扩展等优点。在SpringBoot中使用Ehcache可以加速应用程序的响应速度,提高应用程序的性能。 步骤 1. 引入依赖 在SpringBoot项目的p…

    Java 2023年5月20日
    00
  • Java毕业设计实战项目之在线服装销售商城系统的实现流程

    Java毕业设计实战项目之在线服装销售商城系统的实现流程 本文主要介绍Java毕业设计实战项目之在线服装销售商城系统的实现流程。该系统是一个基于Java Web技术实现的大型在线服装销售商城系统,功能包括用户注册登录、商品浏览、购物车、订单管理、在线支付等。 需求分析 在实现该系统之前,首先需要进行需求分析,具体内容包括: 系统所需功能:包括用户功能,商品功…

    Java 2023年5月24日
    00
  • Java模拟实现一个基于文本界面的《记账软件》

    /**@author: Noiimplant*@version: 1.0*/ 1. 利用java实现简易记账软件 根据尚硅谷java教程进行练习 2. 实现功能 记录家庭支出、收入,打印收支明细表 使用分级菜单的方式 3. 代码实现 3.1 GuliAccount.java package GuliAccount; import java.text.Simp…

    Java 2023年4月27日
    00
  • Java实现Timer的定时调度函数schedule的四种用法

    一、背景介绍 Java中提供了一个Timer类,是一种比较简单的定时器实现,比如我们可以基于这个类实现类似于 Linux 中 Cron 一样定时执行某些任务的功能。其中,定时调度函数 schedule 是 Timer 类最常用的方法之一,他用于安排指定的任务在指定的时间点或者经过指定的延迟后执行一次。这个函数有 4 种用法,下面将详细讲解。 二、使用方法 s…

    Java 2023年5月20日
    00
  • 详解Java如何使用集合来实现一个客户信息管理系统

    详解Java如何使用集合来实现一个客户信息管理系统 1. 概述 在Java中,可以使用集合类来实现一个简单的客户信息管理系统。集合类提供了丰富的数据结构和操作方法,能够满足各种需求。 我们可以使用List或Set来存储客户信息,在程序中实现增删改查等操作。同时,我们可以利用Map来存储客户信息,实现键值对的存储,方便以后的查找和遍历。 2. 使用List实现…

    Java 2023年5月30日
    00
  • JDBC插入数据返回数据主键代码实例

    下面就是“JDBC插入数据返回数据主键”完整攻略,包含以下内容: 概述 实现步骤 示例1:直接使用Statement执行插入操作并返回主键 示例2:使用PreparedStatement预编译执行插入操作并返回主键 1. 概述 在开发中,我们经常需要在数据库中插入数据,并获取插入后的数据主键值。JDBC 提供了两种方式来执行插入操作并返回主键:直接使用 St…

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