java实现单链表中的增删改

yizhihongxing

让我们来讲解一下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文件时,通常有两种方法可供选择:手动合并和使用命令行工具合并。下面我将详细讲解这两种方法的具体操作步骤。 方法一:手动合并 手动合并Java文件需要按照以下步骤进行: 新建一个名为合并后Java文件的空文件 将需要合并的多个Java文件中的代码复制到合并后的Java文件中,按照需要合并的顺序逐一复制,确保没有重复代码。 下面是一个示…

    Java 2023年5月20日
    00
  • 详解IDEA搭建springBoot方式一(推荐)

    下面是详细讲解 “详解IDEA搭建springBoot方式一(推荐)” 的完整攻略: 一、前置准备 安装JDK和IntelliJ IDEA。 确认本地已经安装了maven,并且配置了maven环境变量。 二、创建Spring Boot项目 打开IntelliJ IDEA,选择Create New Project。 在左侧的“Spring Initializr…

    Java 2023年5月15日
    00
  • SpringMVC适配器模式作用范围介绍

    SpringMVC适配器模式作用范围介绍 在SpringMVC中,适配器模式是一个非常重要的设计模式,它可以帮助我们将不同类型的请求映射到不同的处理器方法上。本文将介绍适配器模式的作用范围,并提供两个示例说明。 适配器模式的作用范围 适配器模式的作用范围主要包括以下几个方面: 请求类型:适配器模式可以将不同类型的请求(如GET、POST、PUT、DELETE…

    Java 2023年5月17日
    00
  • Spring AOP日志框架实现过程图解

    下面是关于“Spring AOP日志框架实现过程图解”的完整攻略,包含两个示例说明。 Spring AOP日志框架实现过程图解 Spring AOP(Aspect Oriented Programming)是一种面向切面编程的技术,它可以在不修改原有代码情况下,对系统进行横向切割,实现诸如权限管理、数据校验、操作日志等功能。本文将介绍如何使用Spring A…

    Java 2023年5月17日
    00
  • Springboot热部署实现原理及实例详解

    Spring Boot 热部署实现原理及实例详解 什么是热部署 热部署(Hot swapping)是指在应用程序运行时,无需停止或重启应用程序,就可以实时更新部分或全部代码和配置。热部署可以提高应用程序的开发和测试效率,缩短开发和测试的周期,特别是对于大型项目和复杂项目来说,效果尤为明显。 Spring Boot 热部署实现原理 Spring Boot 应用…

    Java 2023年5月19日
    00
  • Java的Struts框架报错“TokenNotFoundException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“TokenNotFoundException”和“TokenExpiredException”错误。这些错误通常由以下原因之一起: 防止重复提交:Struts框架提供了一种防止重复提交的机制,即使用令牌(Token)来确保每个表单只能提交一次。如果令牌未找到或已过期,则可能会出现这些错误。 配置错误:如果配置文…

    Java 2023年5月5日
    00
  • 详解mybatis.generator配上最新的mysql 8.0.11的一些坑

    下面我将详细讲解如何配合最新的MySQL 8.0.11使用MyBatis Generator,并解决可能会遇到的一些坑。具体步骤如下: 1. 准备工作 在开始之前,我们需要准备一些必要的工具和环境: MySQL 8.0.11及以上版本,这里以MySQL 8.0.26为例。 JDK 8及以上版本。 MyBatis Generator,这里以版本1.4.0为例。…

    Java 2023年5月20日
    00
  • Spring Security 和Apache Shiro你需要具备哪些条件

    Spring Security 和 Apache Shiro 都是 Java 应用程序中常用的安全框架,可以用来为应用程序提供身份验证、授权、密码管理、会话管理等安全功能。 要学习 Spring Security 和 Apache Shiro,你需要掌握以下基础条件: Java 编程基础:因为两个框架都是基于 Java 的,所以你需要掌握 Java 编程语言…

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