Java单链表的增删改查与面试题详解

yizhihongxing

Java单链表的增删改查与面试题详解

概述

Java单链表是一种常用的数据结构,具有插入、删除、查找等基本操作。本文将为大家详细讲解Java单链表的增删改查操作以及相关面试题。

单链表的定义

单链表是一种线性表,采用链式存储结构,通过指针来实现元素之间的关联。单链表由一系列的结点(Node)组成,每个结点包含两部分:数据域和指针域。数据域存储结点的值,指针域存储下一个结点的地址。

单链表的基本操作

插入操作

单链表插入操作有两种方式:头插法和尾插法。头插法将新结点插入到链表头部,尾插法将新结点插入到链表尾部。

头插法示例

public void addFirst(int val) {
    Node newNode = new Node(val, null);
    newNode.next = head.next;
    head.next = newNode;
}

在上面的示例中,我们创建了一个新结点,并将新结点插入到链表头部。首先,我们将新结点的next指针指向原链表的头结点,接着将原链表的头结点指向新结点。

尾插法示例

public void addLast(int val) {
    Node newNode = new Node(val, null);
    if (head.next == null) {
        head.next = newNode;
    } else {
        Node tail = head.next;
        while (tail.next != null) {
            tail = tail.next;
        }
        tail.next = newNode;
    }
}

在上面的示例中,我们创建了一个新结点,并将新结点插入到链表尾部。首先,我们需要遍历整个链表,找到最后一个结点(即next指针为null的结点),然后将最后一个结点的next指针指向新结点。

删除操作

单链表删除操作需要知道要删除的结点的前一个结点。删除操作即将前一个结点的next指针指向要删除结点的下一个结点即可。

public void deleteNode(int val) {
    Node prev = head;
    while (prev.next != null) {
        if (prev.next.val == val) {
            prev.next = prev.next.next;
            return;
        }
        prev = prev.next;
    }
}

在上面的示例中,我们遍历整个链表,找到要删除的结点的前一个结点,然后修改前一个结点的next指针即可。

修改操作

单链表修改操作需要知道要修改的结点的位置。遍历链表找到要修改的结点,然后修改该结点的值即可。

public void updateNode(int pos, int val) {
    Node p = head.next;
    int i = 0;
    while (p != null && i < pos) {
        p = p.next;
        i++;
    }
    if (p != null) {
        p.val = val;
    }
}

在上面的示例中,我们遍历链表找到要修改的结点,然后修改该结点的值即可。

查找操作

单链表查找操作需要知道要查找的值或者其所在的位置。遍历链表找到要查找的结点,然后返回该结点的值或者该结点的位置即可。

public int getVal(int pos) {
    Node p = head.next;
    int i = 0;
    while (p != null && i < pos) {
        p = p.next;
        i++;
    }
    if (p != null) {
        return p.val;
    }
    return -1;
}

public int getPos(int val) {
    Node p = head.next;
    int pos = 0;
    while (p != null && p.val != val) {
        p = p.next;
        pos++;
    }
    if (p != null) {
        return pos;
    }
    return -1;
}

在上面的示例中,我们遍历链表找到要查找的结点,然后返回该结点的值或者该结点的位置即可。

面试题详解

面试题1

如何将一个单链表按照奇偶数分别排列?

解答:可以采用双指针法,创建两个指针分别指向奇数位置和偶数位置的结点,然后将奇数位置的结点插入到一个新链表中,偶数位置的结点插入到另一个新链表中,最后将两个新链表连接起来即可。

面试题2

如何删除一个单链表中的重复结点?

解答:可以采用哈希表来记录每个结点是否出现过,遍历链表的同时判断当前结点是否出现过,若出现过则将前一个结点的next指针指向当前结点的下一个结点即可,时间复杂度为O(n)。

总结

本文介绍了Java单链表的增删改查操作和相关的面试题,希望本文能够帮助大家更好地掌握单链表的基本操作和应用。

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

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

相关文章

  • VS2019开发简单的C/C++动态链接库并进行调用的实现

    下面我将详细讲解如何使用VS2019开发简单的C/C++动态链接库并进行调用的完整攻略,包含以下步骤: 步骤一:创建动态链接库项目 打开Visual Studio 2019,选择 创建新项目。 在 新建项目 弹出框中,选择 Windows桌面向导 面板,选择 动态链接库 (.dll) 项目类型。 为项目命名并选择保存位置,点击 创建。 步骤二:编写动态链接库…

    other 2023年6月26日
    00
  • Google Chrome浏览器 v72.0.3626.96 离线正式版发布附下载地址

    Google Chrome浏览器 v72.0.3626.96 离线正式版发布攻略 Google Chrome是一款广受欢迎的网络浏览器,它提供了快速、安全和稳定的浏览体验。最新版本v72.0.3626.96离线正式版已经发布,本攻略将详细介绍如何下载和安装该版本的Chrome浏览器。 步骤一:下载Chrome浏览器 首先,您需要下载Chrome浏览器的离线安…

    other 2023年8月4日
    00
  • Android aapt自动打包工具详细介绍

    Android aapt自动打包工具详细介绍 aapt(Android Asset Packaging Tool)是Android SDK中的一个重要工具,用于将资源文件打包成APK文件。以下是aapt工具的详细介绍和使用示例: 1. aapt工具的作用 aapt工具主要用于以下几个方面: 将资源文件(如布局文件、图片、字符串等)编译成二进制格式,以便在An…

    other 2023年10月13日
    00
  • UNIX 系统常用管理命令

    以下是UNIX系统常用管理命令的攻略及示例说明: 目录和文件管理命令 ls命令 ls命令是Unix中最常用的命令之一,用于列出目录内容。当我们在一个目录中执行ls命令时,它将会显示该目录下的所有文件和目录的名称。 ls命令的常用参数: -l: 以长格式列出目录内容,包括文件类型、权限、硬链接数、所有者、所属组、文件大小、时间戳等信息。 -a: 列出目录中所有…

    other 2023年6月26日
    00
  • csm与uefi

    以下是关于CSM与UEFI的完整攻略,包括基本介绍、实现步骤、示例说明等内容。 1. 基本介绍 CSM(Compatibility Support Module)是一种兼容模式,用于在UEFI固件中运行传统的BIOS操作系统。UEFI(Unified Extensible Firmware Interface)是一种新型的固件接口,用于替代传统的BIOS固件…

    other 2023年5月10日
    00
  • 详解C语言之文件操作(上)

    关于“详解C语言之文件操作(上)”的攻略,我将从以下几个方面进行详细讲解: 文件操作的基础知识 在进行文件操作之前,需要了解文件的基本概念和属性,以便正确地进行读写操作。包括文件的打开方式、文件指针、文件读写位置等等。在攻略中,应该详细展开讲述这些基础知识,让读者能够有充分的了解和掌握。 文件读写操作函数 通过讲解文件读写操作函数,可以让读者掌握如何进行文件…

    other 2023年6月26日
    00
  • windows下Graphviz安装及入门教程的实现方法

    Windows下Graphviz安装及入门教程实现方法 简介 Graphviz是一种用于绘制图形的软件,能够自动生成流程图、组织结构图和状态转移图等等各种图形,是一个十分方便的数据可视化工具。在本教程中,我们将介绍如何在Windows系统下安装Graphviz软件及如何使用。 安装Graphviz 1.访问Graphviz官方网站并选择Windows平台的下…

    other 2023年6月27日
    00
  • Android SDK命令行工具Monkey参数及使用解析

    Android SDK命令行工具Monkey参数及使用解析攻略 简介 Android SDK提供了一个命令行工具Monkey,用于进行Android应用程序的压力测试和随机事件生成。Monkey可以模拟用户的随机操作,帮助开发人员发现应用程序中的潜在问题。 Monkey参数 Monkey命令行工具有多个参数,用于控制测试的行为和范围。以下是一些常用的参数: …

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