Java如何实现单链表的增删改查

实现单链表是Java中常见的数据结构之一,其中增删改查操作是最基本的操作,下面是Java如何实现单链表的增删改查的完整攻略。

1. 节点类的定义

在实现单链表之前,需要先定义一个节点类,该类用于描述链表的节点信息。节点类一般包含两个属性:数据域和指针域。

public class ListNode {
    public int val;
    public ListNode next;
    public ListNode(int val) {
        this.val = val;
        this.next = null;
    }
}

在该代码中,节点类包含一个整型的数据域val和一个指向下一个节点的指针域next。其中,val用于存储节点中的数据,next用于指向下一个节点。

2. 单链表的实现

在节点类的基础上,可以实现单链表。单链表通常包含一个头节点head,该节点的下一个节点才是链表的第一个实际节点。同时,链表还需要实现如下操作:

2.1 节点的插入

节点的插入包括在链表的某个位置插入一个新节点、在链表头部插入一个新节点以及在链表尾部插入一个新节点。

2.1.1 在链表的某个位置插入一个新节点

在链表的某个位置插入一个新节点,需要先找到该位置的前驱节点,然后将新节点插入到前驱节点后面。

示例代码如下:

public void insertAfter(ListNode prev, int val) {
    ListNode newNode = new ListNode(val);
    newNode.next = prev.next;
    prev.next = newNode;
}

在该代码中,先创建一个新节点newNode,然后将该节点的next指针指向待插入位置的后继节点,最后将前驱节点的next指针指向新节点。

2.1.2 在链表头部插入一个新节点

在链表的头部插入一个新节点,只需要将新节点插入到头节点后面即可。

示例代码如下:

public void addAtHead(int val) {
    ListNode newNode = new ListNode(val);
    newNode.next = head.next;
    head.next = newNode;
}

在该代码中,先创建一个新节点newNode,然后将该节点的next指针指向头节点的下一个节点,最后将头节点的next指针指向新节点。

2.1.3 在链表尾部插入一个新节点

在链表尾部插入一个新节点,需要先找到链表的最后一个节点,然后将新节点插入到该节点后面。

示例代码如下:

public void addAtTail(int val) {
    ListNode newNode = new ListNode(val);
    ListNode p = head;
    while (p.next != null) {
        p = p.next;
    }
    newNode.next = null;
    p.next = newNode;
}

在该代码中,先创建一个新节点newNode,然后使用循环找到链表的最后一个节点,最后将该节点的next指针指向新节点。

2.2 节点的删除

节点的删除包括删除链表中的指定节点以及删除链表中指定位置的节点。

2.2.1 删除链表中的指定节点

在链表中删除指定节点,需要先找到该节点的前驱节点,然后将前驱节点的next指针指向该节点的后继节点。

示例代码如下:

public void deleteNode(ListNode node) {
    node.val = node.next.val;
    node.next = node.next.next;
}

在该代码中,由于是删除给定的节点,因此只需要将给定节点的值和next指针修改为下一个节点的值和next指针即可。

2.2.2 删除链表中指定位置的节点

在链表中删除指定位置的节点,需要先找到该位置的前驱节点,然后将前驱节点的next指针指向该节点的后继节点。

示例代码如下:

public void deleteAtIndex(int index) {
    ListNode p = head;
    for (int i = 0; i < index; i++) {
        p = p.next;
    }
    p.next = p.next.next;
}

在该代码中,先使用循环找到要删除的节点的前驱节点,然后将前驱节点的next指针指向要删除节点的后继节点。

2.3 节点的查找

链表中查找数据可以使用线性查找的方式遍历链表中的所有节点,直到找到节点的值等于目标值或者链表中所有节点遍历完毕即可。

示例代码如下:

public ListNode find(int val) {
    ListNode p = head.next;
    while (p != null && p.val != val) {
        p = p.next;
    }
    return p;
}

在该代码中,先使用循环遍历链表中的所有节点,当找到节点的值等于目标值时返回该节点;否则,当遍历完所有节点时返回null。

3. 总结

本文介绍了Java如何实现单链表的增删改查,并且给出了相应的示例代码进行说明。实现单链表算可以在Java中理解数据结构的基本操作,也是Java程序员必须掌握的基础知识之一。

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

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 微信公众平台通用接口api指南

    微信公众平台通用接口api指南 微信公众平台是一个常用的社交平台,许多企业和个人都在上面拥有自己的公众号,来进行推广和营销。为了更好地与用户互动,许多公众号都会接入微信公众平台提供的通用接口API。 API介绍 微信公众平台通用接口API是一套基于HTTP/HTTPS协议的接口,可用于进行微信公众号的开发和功能增强。API集成了许多有用的功能,例如自定义菜单…

    其他 2023年3月29日
    00
  • php类中private属性继承问题分析

    PHP中的类中可以定义属性,而属性可以有三种访问权限,分别是public、protected和private。其中private属性的访问权限最小,表示只能在所属的类中被访问,子类无法直接访问。但是,不同的继承关系下,private属性的继承方式也存在差异。 在面向对象的编程中,继承是一个非常重要的概念,而PHP也提供了完整的继承机制,可以通过继承来获得父类…

    other 2023年6月27日
    00
  • 【ruby】ruby安装

    以下是关于“【Ruby】Ruby安装”的完整攻略,包括基本概念、安装方法和两个示例。 基本概念 Ruby是一种面向对象的动态编程语言,具有简单、易、高效、灵活等特点,被广泛应用于Web开发、系统管理、数据处理等领域。在安装Ruby之前,需要先安装Ruby的运行环境,即Ruby解释器。 安装方法 以下是在不同操作系统上安装的方法: 在Windows上安装Rub…

    other 2023年5月7日
    00
  • sql server实现递归查询的方法示例

    下面我们将详细讲解如何使用 SQL Server 实现递归查询。 什么是递归查询 递归查询是指在查询过程中引用了相同表的子查询,即在一个查询中反复地引用同一个表的查询语句,以实现对表中数据的逐层递归查询。通俗点来说,递归查询就是查询每个节点的子节点,再递归查询每个子节点的子节点,以此类推。 在 SQL Server 中,实现递归查询的方法是使用 CTE(通用…

    other 2023年6月27日
    00
  • 安装博图v17时安装不上一直提示要重启的解决方法

    安装博图v17时出现无法正常安装的情况,常见的出现多为安装程序提示重启计算机才能安装的问题。以下是解决该问题的攻略。 步骤一:关闭占用程序 先检查计算机中是否有其他程序在占用该软件相关的文件或进程。可在任务管理器中搜索相关进程并结束它。此外,如果计算机中安装了多个安全软件,有可能其中一个软件已经锁定了该软件的安装程序,需要把防火墙、杀毒软件暂停或设置其信任该…

    other 2023年6月27日
    00
  • 苹果iOS11.1开发者预览版beta 3固件下载大全(附下载地址)

    苹果iOS11.1开发者预览版beta 3固件下载攻略 苹果iOS11.1开发者预览版beta 3固件是为开发者提供的测试版本,其包含了最新的功能和改进,同时也存在一些未完善的地方。本文将提供下载该版本固件的详细攻略,帮助开发者获取最新的测试版本,进行开发测试。 步骤一:加入Apple开发者计划 要下载iOS开发者预览版beta 3固件,需要首先加入Appl…

    other 2023年6月26日
    00
  • 一文带你掌握Java LinkedBlockingQueue

    一文带你掌握Java LinkedBlockingQueue Java LinkedBlockingQueue 是一种线程安全的阻塞队列,实现了 BlockingQueue 接口,并通过链表的形式保存元素。本文将详细介绍 LinkedBlockingQueue 的使用方法和注意事项。 LinkedBlockingQueue 的初始化 LinkedBlocki…

    other 2023年6月26日
    00
  • 如何写好css系列之button

    以下是关于“如何写好CSS系列之Button”的完整攻略,包括基本概念、步骤和两个示例。 基本概念 Button是网页常用的交互元素之一,用于触发事件或提交表单。CSS(Cascading Sheets)是一种用于描述网页样的语言,可以用于美化Button的外观和交互效果。 步骤 以下是使用CSS美化Button的步骤: Button元素:使用CSS选择器选…

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