java实现单链表增删改查的实例代码详解

Java实现单链表增删改查的实例代码详解

单链表是一种常见的数据结构,它由多个节点组成,每个节点包含一个值和一个指针,指向下一个节点。单链表可以用于实现栈、队列等数据结构。

在Java中,我们可以使用类来表示一个单链表。下面是单链表节点类的示例代码:

class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

这个类表示单链表中的一个节点,val是节点的值,next是指向下一个节点的指针。

实现插入节点

要在单链表中插入一个新节点,需要找到要插入的位置,然后修改它前面的节点的指针。以下是在单链表中插入一个新节点的示例代码:

public void insertNode(ListNode head, ListNode newNode, int position) {
    if (head == null) {
        return;
    }
    if (position == 0) {
        newNode.next = head;
        head = newNode;
        return;
    }
    int index = 0;
    ListNode cur = head;
    while (cur != null) {
        if (index == position - 1) {
            newNode.next = cur.next;
            cur.next = newNode;
            break;
        }
        cur = cur.next;
        index++;
    }
}

这个方法接受三个参数:head表示单链表的头节点,newNode表示要插入的新节点,position表示要插入的位置。如果headnull,说明链表为空,直接返回。如果position为0,说明要插入到链表的开头,这时只需要将新节点的指针指向头节点即可。如果position大于0,则需要遍历链表找到要插入的位置,然后修改指针。

实现删除节点

要从单链表中删除一个节点,需要先找到要删除的节点的前一个节点,然后修改它的指针。以下是在单链表中删除一个节点的示例代码:

public void deleteNode(ListNode head, int position) {
    if (head == null) {
        return;
    }
    if (position == 0) {
        head = head.next;
        return;
    }
    int index = 0;
    ListNode cur = head;
    while (cur.next != null) {
        if (index == position - 1) {
            cur.next = cur.next.next;
            break;
        }
        cur = cur.next;
        index++;
    }
}

这个方法的参数与上一个方法相似。如果headnull,直接返回。如果position为0,说明要删除的是头节点,只需要将头节点指向下一个节点即可。如果position大于0,则需要遍历链表找到要删除的节点的前一个节点,然后修改指针。

实现修改节点

要修改单链表中的一个节点的值,只需要找到这个节点,然后修改它的值即可。以下是修改单链表中一个节点的示例代码:

public void modifyNode(ListNode head, int position, int newVal) {
    if (head == null) {
        return;
    }
    int index = 0;
    ListNode cur = head;
    while (cur != null) {
        if (index == position) {
            cur.val = newVal;
        }
        cur = cur.next;
        index++;
    }
}

这个方法的参数与前两个方法相似。如果headnull,直接返回。查找要修改的节点,然后修改节点的值。

实现查找节点

要在单链表中查找一个节点,需要遍历整个链表,比对各个节点的值,直到找到匹配的节点。以下是查找单链表中一个节点的示例代码:

public int searchNode(ListNode head, int value) {
    if (head == null) {
        return -1;
    }
    int index = 0;
    ListNode cur = head;
    while (cur != null) {
        if (cur.val == value) {
            return index;
        }
        cur = cur.next;
        index++;
    }
    return -1;
}

这个方法的参数与前面的方法相似。如果headnull,直接返回-1。遍历链表查找匹配的节点,如果找到则返回位置,否则返回-1。

示例说明

下面是一个使用单链表插入、删除、修改和查找节点的示例:

ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);
node1.next = node2;
node2.next = node3;

// 插入节点
ListNode newNode = new ListNode(4);
insertNode(node1, newNode, 2);

// 删除节点
deleteNode(node1, 1);

// 修改节点
modifyNode(node1, 2, 5);

// 查找节点
int position = searchNode(node1, 3);

这段代码创建了一个含有3个节点的单链表,然后插入一个新节点,删除节点2,修改节点3的值,最后查找节点3的位置。

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

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

相关文章

  • 详解基于React.js和Node.js的SSR实现方案

    下面我将为你详细讲解“详解基于React.js 和Node.js的SSR实现方案”的完整攻略。 什么是SSR SSR(Server-Side Rendering )是指在服务器端生成组件对应的 HTML 字符串,并将其响应给客户端。与传统的SPA(Single Page Application)开发模式不同,SSR不仅可以提高首屏加载速度,而且可以提高SEO…

    node js 2023年6月8日
    00
  • Node.js中调用mysql存储过程示例

    下面是关于“Node.js中调用mysql存储过程”的完整攻略。 1. 安装mysql包 要在Node.js中操作mysql,首先需要安装mysql包。打开终端或命令行窗口,输入以下命令进行安装: npm install mysql 2. 连接mysql数据库 在使用mysql包前,需要先连接上mysql数据库。使用下面的代码来连接MySQL数据库: con…

    node js 2023年6月8日
    00
  • Nodejs学习笔记之NET模块

    首先我要给大家介绍的是Node.js中的NET模块,它是一个用于创建TCP服务器和客户端的核心模块。我们可以使用该模块创建各种TCP连接,并进一步使用它来实现各种网络应用,如聊天室、游戏等等。 一、创建TCP服务器 使用NET模块,我们可以很容易地创建一个TCP服务器。以下是一个简单的示例: const net = require(‘net’); const…

    node js 2023年6月8日
    00
  • 基于JavaScript的操作系统你听说过吗?

    当谈到JavaScript的应用时,大多数人会想到网页交互和动态效果,却很少会想到操作系统。然而,这并不意味着JavaScript无法实现操作系统的功能。 什么是基于JavaScript的操作系统? 基于JavaScript的操作系统是使用JavaScript编写的操作系统。它运行在Web浏览器环境中,与传统操作系统不同,它不需要安装或下载,也不需要硬盘或驱…

    node js 2023年6月8日
    00
  • Node.js 使用request模块下载文件的实例

    Node.js使用request模块下载文件需要经过以下几个步骤: 1.安装request模块 在终端中运行以下命令可以安装request模块: npm install request 2.加载request模块并发送请求 在Node.js的代码中,需要使用require函数来加载request模块。然后使用request模块发送请求并下载文件。以下是一个简…

    node js 2023年6月8日
    00
  • Node.js v8.0.0正式发布!看看带来了哪些主要新特性

    Node.js v8.0.0正式发布! 2021年5月30日,Node.js正式发布v8.0.0版本。本次更新带来了不少新特性和改进,本文将为大家介绍其中的主要新特性与用法,并且给出两个示例说明。 1. 新增async/await语法糖 async/await是一个异步编程的语法糖,能够使异步的代码更加易读,易维护。通过async定义一个异步函数,该函数返回…

    node js 2023年6月8日
    00
  • node.js中的fs.ftruncate方法使用说明

    下面是关于“node.js中的fs.ftruncate方法使用说明”的完整攻略: 1. 简介 fs.ftruncate() 是 Node.js 中 fs 模块的一个方法,用于截断文件,它会将指定文件大小截为指定的大小。 2. 语法 fs.ftruncate(fd, len, callback) 参数: fd: 必选参数,文件描述符。 len: 必选参数,需要…

    node js 2023年6月8日
    00
  • Nodejs进阶之服务端字符编解码和乱码处理

    Nodejs进阶之服务端字符编解码和乱码处理 字符编解码 在服务端处理字符编解码时,需要注意以下几个方面: 请求头中的字符编码 浏览器发送请求时,会将当前页面的字符编码信息放在请求头中,服务端在解析请求时需注意此处的字符编码信息。 示例代码: const http = require(‘http’); const server = http.createSe…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部