Java实现单链表基础操作

下面我来详细讲解“Java实现单链表基础操作”的完整攻略。

单链表简介

单链表是一种最简单的链式存储结构,其基本组成部分是结点,结点包括数据域和指针域,指针域用来指向下一个结点。单链表的优点是插入、删除数据方便,缺点是查询数据相对困难。

基础操作

单链表的基础操作包括创建链表、插入结点、删除结点、查询结点、遍历链表等。下面分别进行介绍。

创建链表

创建链表需要先定义结点类,再利用结点类创建链表。结点类中包含了数据域和指针域,代码如下:

public class ListNode {
    int val;
    ListNode next;

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

定义好结点类之后,在创建链表的过程中,只需要依次插入结点即可。例如,我们要创建一个包含 5 个元素的链表,代码如下:

ListNode head = new ListNode(0); // 创建链表头结点
ListNode p = head; // 定义指针指向头结点

for (int i = 1; i < 5; i++) { // 循环创建 4 个结点
    ListNode node = new ListNode(i); // 创建结点
    p.next = node; // 将结点插入链表
    p = node; // 指针指向新插入的结点
}

插入结点

在链表中插入结点,是先找到要插入位置的前一个结点,再将新结点插入该位置。例如,我们要在链表中间插入一个结点,代码如下:

ListNode node = new ListNode(val); // 创建新结点
ListNode p = head; // 定义指针指向头结点

while (p.next != null && p.next.val < val) { // 寻找要插入位置的前一个结点
    p = p.next;
}

node.next = p.next; // 将新结点插入到链表中
p.next = node;

删除结点

在链表中删除结点,需要先找到要删除的结点的前一个结点,然后将其指针指向该结点的下一个结点。例如,我们要删除链表中值为 3 的结点,代码如下:

ListNode p = head; // 定义指针指向头结点

while (p.next != null && p.next.val != val) { // 寻找要删除结点的前一个结点
    p = p.next;
}

if (p.next != null && p.next.val == val) { // 删除结点
    p.next = p.next.next;
}

查询结点

在链表中查询结点,需要遍历整个链表,找到目标结点。例如,我们要查询链表中值为 2 的结点是否存在,代码如下:

ListNode p = head; // 定义指针指向头结点

while (p != null) {
    if (p.val == val) { // 找到目标结点
        return true;
    }
    p = p.next;
}

return false;

遍历链表

遍历链表就是将链表中的每个结点都访问一遍,可以输出结点中的值或者进行其他操作。例如,我们要输出链表中每个结点的值,代码如下:

ListNode p = head.next; // 定义指针指向第一个结点

while (p != null) {
    System.out.print(p.val + " "); // 输出结点中的值
    p = p.next;
}

示例

下面给出两个示例,分别是创建链表和删除结点的示例。

创建链表示例

假设我们要创建一个链表,包含以下 5 个元素: 1 -> 3 -> 5 -> 7 -> 9。下面是完整代码:

public class ListNode {
    int val;
    ListNode next;

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

public class Solution {
    public ListNode createLinkedList() {
        ListNode head = new ListNode(0); // 创建链表头结点
        ListNode p = head; // 定义指针指向头结点

        for (int i = 1; i < 10; i += 2) { // 循环创建 5 个结点
            ListNode node = new ListNode(i); // 创建结点
            p.next = node; // 将结点插入链表
            p = node; // 指针指向新插入的结点
        }

        return head.next;
    }
}

删除结点示例

假设现在有一个链表,包含以下 5 个元素: 1 -> 3 -> 5 -> 7 -> 9。我们要删除其中值为 5 的结点。下面是完整代码:

public class ListNode {
    int val;
    ListNode next;

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

public class Solution {
    public void deleteNode(ListNode head, int val) {
        ListNode p = head;

        while (p.next != null && p.next.val != val) { // 寻找要删除结点的前一个结点
            p = p.next;
        }

        if (p.next != null && p.next.val == val) { // 删除结点
            p.next = p.next.next;
        }
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现单链表基础操作 - Python技术站

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

相关文章

  • mybatis返回数组

    以下是“mybatis返回数组”的完整攻略: MyBatis返回数组 MyBatis是一种流行的Java持久化框架,它提供了一种简单的方式来执行SQL查询并将结果映射到Java对象中。在MyBatis中可以使用resultType或resultMap来指定查询结果的类型。如果查询结果是一个数组,可以使用以下方法来返回数组。 1 使用List 在MyBatis…

    other 2023年5月7日
    00
  • docker部署Macvlan实现跨主机网络通信的实现

    Docker部署Macvlan实现跨主机网络通信的实现 什么是Macvlan? Macvlan是Linux内核提供的一种虚拟网卡类型,它可以让一个物理网卡拥有多个MAC地址,并且可以实现多个容器使用同一主机物理接口的网络通信,这样就可以实现跨主机的网络通信。 步骤 1. 创建Macvlan网络 docker network create -d macvlan…

    other 2023年6月26日
    00
  • 使用whiptail写linux字符界面ssh链接工具2.0

    使用whiptail编写字符界面ssh链接工具2.0 1. 引言 在Linux系统中,使用ssh命令可以方便地登录远程主机,进行管理和操作。但是,如果需要经常登录多个主机,手动输入IP地址,用户名和密码是比较繁琐的事情。因此,为了提高效率,我们可以使用一个字符界面的ssh链接工具来管理和连接多个主机。 本文将介绍如何使用Whiptail编写一个字符界面的ss…

    其他 2023年3月28日
    00
  • Linux Shell函数返回值

    Linux Shell函数返回值攻略 在Linux Shell中,函数是一种将一系列命令组合在一起以完成特定任务的方法。函数可以接受参数,并且可以返回一个值作为结果。本攻略将详细讲解如何在Linux Shell中使用函数并获取返回值。 定义函数 要定义一个函数,可以使用以下语法: function_name() { # 函数体 # 可以包含一系列命令 # 可…

    other 2023年7月29日
    00
  • 实验十一 团队作业7—团队项目设计完善&编码测试

    实验十一 团队作业7—团队项目设计完善&编码测试的完整攻略 在团队项目开发中,设计完善和编码测试是非常重要的环节。本文将详细介绍团队项目设计完善和编码测试的完整攻略,并提供两个示例说明。 团队项目设计完善的攻略 团队项目设计完善的攻略包括以下步骤: 确定项目需求和目标,明确项目的功能和特性。 制定项目计划和进度表,明确项目的时间和资源限制。 设计…

    other 2023年5月5日
    00
  • win10怎么初始化电脑设置?Win10初始化电脑操作教程

    首先,需要明确一下何为“初始化电脑设置”?简单地说,就是恢复出厂设置。在重装系统、升级系统、更换设备或者出现系统故障的情况下,将电脑恢复到最开始使用时的状态。 下面是在Win10系统中初始化电脑设置的步骤: 步骤一 进入“更新和安全”设置菜单 1.1 点击Win10桌面右下角的“通知”图标,在接下来的弹出菜单中选择“所有设置”。 1.2 进入“设置”菜单后,…

    other 2023年6月20日
    00
  • win7/win8.1桌面右键”新建文件夹”不见了的快速找回方法

    下面是详细的攻略: 问题描述 在Windows7和Windows8.1系统中,桌面右键菜单中的“新建文件夹”不见了,无法快速创建新文件夹,应该如何解决呢? 解决方法 其实这个问题很容易解决,只要按照以下步骤操作即可: 打开“运行”窗口,可以通过快捷键Win + R打开; 在“运行”窗口中输入“regedit”并回车; 进入注册表编辑器界面后,在左侧导航栏中依…

    other 2023年6月27日
    00
  • VS2015开发环境的安装和配置

    VS2015开发环境的安装和配置攻略 1. 下载和安装VS2015 首先,你需要下载并安装Visual Studio 2015(简称VS2015)。你可以在Microsoft官方网站上找到VS2015的下载链接。 在网站上找到VS2015的下载链接,并点击下载。 运行下载的安装程序。 在安装程序中选择你想要的安装选项,例如安装位置和所需的组件。 点击“安装”…

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