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日

相关文章

  • JavaWeb实现学生信息管理系统(1)

    JavaWeb实现学生信息管理系统需要以下步骤: 1. 环境搭建 首先需要搭建好JavaWeb开发环境,包括JDK和IDE等工具,以及Tomcat服务器。可以参考相关教程进行安装配置。 2. 创建项目 在IDE中创建一个新的JavaWeb项目,并创建所需的数据库表。可以使用MySQL等关系型数据库进行创建,具体表结构可以根据实际需求进行设计。 3. 编写Ja…

    Java 2023年5月20日
    00
  • Springboot项目中内嵌sqlite数据库的配置流程

    首先,我们需要在pom.xml中引入sqlite-jdbc依赖。在dependencies标签中添加如下代码: <dependency> <groupId>org.xerial</groupId> <artifactId>sqlite-jdbc</artifactId> <version&gt…

    Java 2023年5月20日
    00
  • 基于Java中字符串内存位置详解

    基于Java中字符串内存位置详解攻略 什么是Java字符串 在Java中,字符串(String)是一种对象类型,可以用来存储和操作文本数据。Java中的字符串是不可变的,也就是说,一旦创建,字符串对象的值就无法改变。 例如,我们可以使用以下代码来创建一个字符串对象: String str = "Hello, world!"; Java字符…

    Java 2023年5月26日
    00
  • SpringMVC 传日期参数到后台的实例讲解

    在 Spring MVC 中,我们可以使用多种方式来传递日期参数到后台,包括使用 @DateTimeFormat 注解、使用 Converter 接口、使用 Formatter 接口等。本文将详细讲解 Spring MVC 如何传递日期参数到后台,包括如何使用 @DateTimeFormat 注解、使用 Converter 接口、使用 Formatter 接…

    Java 2023年5月18日
    00
  • eclipse配置tomcat开发Dynamic Web Project环境图解

    下面我将详细讲解 “eclipse配置tomcat开发Dynamic Web Project环境图解”的完整攻略: 一、前置条件 在进行eclipse配置tomcat开发Dynamic Web Project环境前,需要确保你已经完成以下几个步骤: 安装eclipse,推荐使用最新版本; 安装tomcat,并且成功启动tomcat服务; 安装Java SDK…

    Java 2023年6月2日
    00
  • 基于javaweb+jsp实现企业车辆管理系统

    下面来分享一下实现企业车辆管理系统的攻略。 1.准备工作 在开始实现之前,必须要了解相关技术和工具。具体包括: JavaSE知识:掌握JavaSE基础知识和编程技巧。 JavaWeb知识:掌握Servlet、JSP、JDBC、Tomcat 服务器等Web开发技术。 数据库技术:熟练掌握SQL语言、Oracle和MySQL等数据库的使用。 开发工具:Eclip…

    Java 2023年5月24日
    00
  • 性能调优之java服务器容器调优详解

    性能调优之 Java 服务器容器调优详解 背景介绍 在实际开发中,Java 服务器容器调优是一项非常重要的工作。它可以帮助我们优化服务器的性能,提高应用程序的性能和稳定性。本文将详细介绍 Java 服务器容器调优的完整攻略。 Java 服务器容器调优攻略 调整 JVM 参数 优化 JVM 内存参数 -Xmx 和 -Xms 参数用于指定堆最大和最小值 -XX:…

    Java 2023年5月19日
    00
  • java 用泛型参数类型构造数组详解及实例

    Java 用泛型参数类型构造数组详解及实例 在 Java 中,我们可以使用泛型来创建具有不同类型的集合。但有时候,我们需要创建一个数组,每个元素的类型都不一样,这时候,我们可以使用泛型来创建一个具有不同类型的数组。 泛型数组概述 Java 中是不允许直接使用泛型类型实例化数组,例如下面的代码会报错: List<Integer>[] arr = n…

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