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日

相关文章

  • 系统临时文件夹在哪里

    系统临时文件夹是操作系统用来临时存放程序运行过程中产生的中间数据的目录,通常也是浏览器下载文件的默认存储位置。了解系统临时文件夹的位置可以帮助我们在日常使用电脑时更好地管理和清理临时文件,从而提升系统的运行效率。下面,我将为大家介绍系统临时文件夹在不同操作系统中的位置。 Windows系统下的系统临时文件夹位置: Windows系统下的系统临时文件夹的默认位…

    其他 2023年4月16日
    00
  • Vue 2.0的数据依赖实现原理代码简析

    下面是关于“Vue 2.0的数据依赖实现原理代码简析”的详细讲解。 什么是数据依赖? 在Vue中,数据依赖是指当一个数据发生变化时,与之相关的视图也会随之更新。例如,当我们修改了一个数据模型,则使用了这个模型的视图也会被自动更新。 Vue 2.0数据依赖的实现原理 在Vue 2.0中,主要采用了以下两个概念来实现数据依赖: 观察者模式:Vue通过建立观察者(…

    other 2023年6月27日
    00
  • 实例讲解易语言数组排序

    标题:实例讲解易语言数组排序 介绍 在易语言中,数组排序是非常常见的需求。本文将介绍如何使用易语言对数字数组进行排序,并提供两个示例来说明。 数组排序 易语言中提供了内置函数 SortArray 来对数组进行排序。它的语法如下: SortArray(ArrayVar, Order [, Type]) 其中: ArrayVar 是要排序的数组变量; Order…

    other 2023年6月25日
    00
  • Vue2.0 多 Tab切换组件的封装实例

    下面我将为您详细讲解“Vue2.0 多 Tab切换组件的封装实例”的完整攻略。 第一步:编写Tab组件的基本结构 首先,在编写多 Tab 切换组件之前,我们需要一些基本的结构,如: <template> <div class="tabs"> <div class="tabs-header"…

    other 2023年6月25日
    00
  • react开发者工具reactdevelopertools的下载安装

    React开发者工具React Developer Tools的下载安装 React Developer Tools是一款非常有用的浏览器扩展程序,可以帮助React开发者更轻松地调试分析React应用程序。本攻略将详细介绍如何下载和安装React Developer Tools,包括Chrome和Firefox浏览器的安装方法两个示例说明。 Chrome浏…

    other 2023年5月7日
    00
  • 详解Linux中搭建常用服务器

    详解Linux中搭建常用服务器 1. 前言 在 Linux 系统中,我们可以轻松搭建各种服务器,如 Web 服务器、数据库服务器、FTP 服务器等。下面就是详解 Linux 中搭建常用服务器的完整攻略。 2. 搭建 Web 服务器 2.1 安装 Apache 在 Linux 系统中,Apache 是最常用的 Web 服务器之一。下面是在 Ubuntu 系统中…

    other 2023年6月27日
    00
  • Gitblit中采用Ticket模式进行协作开发

    Gitblit中采用Ticket模式进行协作开发 Gitblit是一个用Java编写的Git服务器,提供一些基本的Git管理功能,同时还提供了强大的权限控制功能。在协作开发中,Gitblit提供了Ticket模式,方便团队成员在一个地方跟踪和协调任务。 Ticket模式介绍 Ticket模式是Gitblit提供的一种任务跟踪功能,类似于GitHub上的Iss…

    其他 2023年3月28日
    00
  • linux whoami命令参数及用法详解(linux查看登陆用户名)

    当你在Linux系统下登录账户时,你可以通过whoami命令来查看当前登录的用户名。这个命令的使用非常简单,本篇攻略将介绍whoami命令的参数和用法。 命令参数 whoami命令没有参数,只有一个选项,即–help。如果你需要查看帮助信息,可以输入以下命令: whoami –help 使用案例 示例1:查看当前登录用户名 当你登录Linux系统的时候,…

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