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日

相关文章

  • C++11中内联函数(inline)用法实例

    下面是C++11中内联函数的详细讲解和实例说明。 什么是内联函数 内联函数是在程序运行时,将函数调用处直接替换成函数体,以避免函数调用带来的额外开销和时间浪费。在C++中,可以使用inline关键字来声明一个函数是内联函数。 内联函数的用法 内联函数通常用于执行简单的、轻量级的操作,常见的操作包括返回某个常量值或者进行一些简单的求和运算等,这些操作的开销非常…

    other 2023年6月26日
    00
  • 利用prop-types第三方库对组件的props中的变量进行类型检测

    使用 PropTypes 对组件的 props 进行类型检测 在 React 中,我们可以使用 PropTypes 第三方库来对组件的 props 中的变量进行类型检测。PropTypes 提供了一种简单而强大的方式来确保我们的组件接收到正确的数据类型,从而提高代码的可靠性和可维护性。 安装 PropTypes 首先,我们需要安装 PropTypes。可以使…

    other 2023年7月28日
    00
  • iOS无障碍适配西瓜视频Voice Over实践示例

    iOS无障碍适配西瓜视频Voice Over实践示例 背景介绍 随着移动设备使用的普及,越来越多的人选择在手机、平板上观看视频。然而,对于少数视力有障碍的用户,这一体验却相当可怕,他们需要依靠现有无障碍功能才能正常使用智能手机。因此,为了让更多用户能够顺利使用产品,对iOS设备做无障碍适配,是非常有必要的。 Voice Over介绍 Voice Over是i…

    other 2023年6月26日
    00
  • PHP中Trait及其应用详解

    PHP中Trait及其应用详解 什么是Trait Trait 是 PHP 5.4.0 开始新增的功能之一,可以更加灵活的组合类的代码,实现代码复用和避免多重继承的问题。 简单说,Trait 是一种类似于类的机制,但不能直接实例化的“代码块”,可以在类中使用,甚至可以在多个类中共享使用。 Trait 本身没有实现机制,只是用于分发代码功能,可以视为是(预定义的…

    other 2023年6月27日
    00
  • 深入理解final变量的初始化

    深入理解final变量的初始化是一项非常重要的知识点,在Java中,final变量可以用来定义不可变对象,保证程序的安全性和稳定性。下面,我将为您详细讲解final变量的初始化攻略,包括基本原理、初始化方式和示例说明。 基本原理 在Java中,final关键字表示一个不可变量,final变量一旦赋值后就不能修改。而final变量的初始化分为两种方式:显式初始…

    other 2023年6月20日
    00
  • win10 Build 10108版本来了:开关控件有所变化

    Win10 Build 10108版本来了:开关控件有所变化攻略 1. 简介 Win10 Build 10108版本是Windows 10的一个更新版本,其中的新特性之一是开关控件有所变化。这些变化包括开关控件的颜色和形状等方面的改变。 2. 开关控件颜色变化 在Win10 Build 10108版本中,开关控件的颜色变得更加明亮和鲜艳。这是因为在新版本中,…

    other 2023年6月26日
    00
  • 哔哩哔哩如何自定义视频操作面板 哔哩哔哩自定义视频操作面板的方法

    哔哩哔哩如何自定义视频操作面板 在哔哩哔哩上,用户可以自定义视频操作面板,以满足个人需求。自定义视频操作面板的方法如下: 方法一:通过网页端设置 打开哔哩哔哩官网,在登录后进入个人中心页面 在个人中心页面,点击「设置」选项进入设置页面 在设置页面,点击「播放器设置」选项 在播放器设置页面,可以看到「视频操作面板布局」选项 点击「视频操作面板布局」选项,可以看…

    other 2023年6月25日
    00
  • Photolemur 3中文版安装破解详细图文教程

    以下是”Photolemur 3中文版安装破解详细图文教程”的完整攻略。 Photolemur 3中文版安装破解详细图文教程 简介 Photolemur 3是一款非常出色的Mac平台图像处理软件,能够自动智能地为您的照片进行色彩校正、修饰、降噪等处理。如果您正在寻找一款方便好用的图像处理软件,那么Photolemur 3无疑是非常不错的选择。 破解方法 首先…

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