Java 实现链表结点插入

yizhihongxing

Java 实现链表结点插入

概述

链表是一种动态数据结构,Java 中其实现可以分为单向链表、双向链表和循环链表,链表结点插入是链表的基本操作之一。下文将详细讲解 Java 实现链表结点插入的完整攻略。

步骤

1. 定义结点类

链表中每个元素都是结点,一个结点有两个属性:

  • value:表示当前结点的值
  • next:表示当前结点的下一个结点

Java 中可以定义一个结点类(如下所示),用来保存当前结点的值和指向下一个结点的引用。

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

2. 分析结点插入的情况

插入结点时,分为以下三种情况:

  • 新结点插入到链表头部
  • 新结点插入到链表尾部
  • 新结点插入到链表中间

3. 实现结点插入

针对不同的插入情况,可以分别实现链表结点的插入方法。

插入到链表头部

在链表头插入结点,只需要将新结点插入到链表头部即可。具体操作如下:

public ListNode insertToHead(ListNode head, int val) {
    ListNode newNode = new ListNode(val);
    newNode.next = head;
    return newNode;
}
插入到链表尾部

在链表尾部插入结点,需首先先找到链表的尾部结点,然后再插入新结点。具体操作如下:

public ListNode insertToTail(ListNode head, int val) {
    if(head == null) {
        return new ListNode(val);
    }
    ListNode cur = head;
    while(cur.next != null) {
        cur = cur.next;
    }
    cur.next = new ListNode(val);
    return head;
}
插入到链表中间

在链表中间插入结点,首先需要找到指定插入位置的前一个结点,然后将新结点插入到该位置。具体操作如下:

public ListNode insertToPos(ListNode head, int val, int pos) {
    ListNode newNode = new ListNode(val);
    if(pos == 1) {
        newNode.next = head;
        return newNode;
    }
    int cnt = 1;
    ListNode pre = head;
    while(pre != null && cnt < pos - 1) {
        cnt++;
        pre = pre.next;
    }
    if(pre == null) {
        return head;
    }
    newNode.next = pre.next;
    pre.next = newNode;
    return head;
}

示例说明

以下是针对不同插入情况的调用示例说明。

插入到链表头部

ListNode head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head = insertToHead(head, 100);
while(head != null) {
    System.out.print(head.val + " ");
    head = head.next;
}
// 输出结果为:100 1 2 3

插入到链表尾部

ListNode head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head = insertToTail(head, 100);
while(head != null) {
    System.out.print(head.val + " ");
    head = head.next;
}
// 输出结果为:1 2 3 100

插入到链表中间

ListNode head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head = insertToPos(head, 100, 2);
while(head != null) {
    System.out.print(head.val + " ");
    head = head.next;
}
// 输出结果为:1 100 2 3

总结

Java 实现链表结点插入的攻略分为三个步骤,包括定义结点类、分析结点插入情况和实现结点插入。在实现插入方法时,需分别考虑插入到链表头部、尾部和中间三种情况。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 实现链表结点插入 - Python技术站

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

相关文章

  • 关于laravel框架中的常用目录路径函数

    在 Laravel 中,常用目录路径函数可以方便地获取项目中的各种路径,帮助开发者更加高效地开发和维护 Web 应用程序。本篇攻略将详细讲解 Laravel 中的常用目录路径函数,包括它们的作用、使用方法和示例说明。 1. 常用目录路径函数 Laravel 中常用的目录路径函数有以下几个: app_path():返回 app 目录的路径。 base_path…

    other 2023年6月27日
    00
  • 常见路由器默认IP地址整理总结

    常见路由器默认IP地址整理总结攻略 路由器是连接计算机网络的设备,它使用IP地址来进行通信和管理网络流量。在设置路由器之前,我们需要知道它的默认IP地址。下面是一份常见路由器默认IP地址的整理总结攻略。 1. 查找路由器品牌和型号 首先,我们需要查找路由器的品牌和型号。这通常可以在路由器的外部或底部找到。品牌和型号的信息对于确定默认IP地址非常重要,因为不同…

    other 2023年7月30日
    00
  • C语言数据结构之双向循环链表的实例

    C语言数据结构之双向循环链表的实例 什么是双向循环链表? 双向循环链表是一种链式存储结构。每个节点都包含两个指针域,分别指向前一个节点和后一个节点,形成一个环形结构。双向循环链表可以实现正向和反向遍历,插入和删除节点的时间复杂度为$O(1)$。 双向循环链表的结构体定义 typedef struct Node { ElemType data; struct …

    other 2023年6月27日
    00
  • iPadOS13.1.2固件下载地址 iPadOS13.1.2下载

    iPadOS 13.1.2固件下载攻略 iPadOS 13.1.2是苹果公司最新发布的操作系统版本,它带来了一些修复和改进。如果你想下载并安装这个固件,下面是一个详细的攻略。 步骤一:备份你的iPad 在开始下载和安装新的固件之前,强烈建议你先备份你的iPad。这样可以确保你的数据在升级过程中不会丢失。你可以通过iCloud或iTunes进行备份。 步骤二:…

    other 2023年8月4日
    00
  • 苹果发布iOS10.3.3开发者预览版Beta3:修复bug和提升性能

    苹果发布iOS10.3.3开发者预览版Beta3:修复bug和提升性能 简介 苹果公司近日发布了iOS 10.3.3开发者预览版Beta3。这个版本的主要目的是修复已知的bug并提升系统的性能稳定性,同时对开发者进行测试,以便在正式发布之前修复可能存在的问题。 如何获取iOS 10.3.3开发者预览版Beta3? 要获得iOS 10.3.3开发者预览版Bet…

    other 2023年6月26日
    00
  • 解析Linux xfs文件系统stat命令Birth字段为空的原因

    当使用Linux xfs文件系统时,在执行”stat”命令时,可能会发现Birth字段为空。这种情况通常是由于一些特殊原因所导致的。本篇攻略将详细讲解这些原因,并提供两个示例说明。 原因1:xfs不支持Birth字段 xfs是一种常用的文件系统却不支持文件的创建时间(Birth字段)记录。因此,如果你使用的是xfs文件系统,无论文件是何时创建的,Birth字…

    other 2023年6月27日
    00
  • Vue nextTick延迟回调获取更新后DOM机制详解

    Vue.js是一款非常流行的JavaScript框架,它提供了响应式和组件化的视图组织方式。但是,当我们需要在更新数据后执行一些DOM操作时,由于Vue是异步更新DOM的,可能会导致DOM尚未更新就执行了操作,为了解决这个问题,Vue提供了nextTick方法。 什么时候使用nextTick 在Vue中,更新数据是异步进行的。也就是说,当组件更新数据时,DO…

    other 2023年6月27日
    00
  • 解决执行maven命令时提示Process terminated的问题

    解决执行maven命令时提示Process terminated的问题,可以尝试以下几个方法: 1. 检查环境变量 检查Maven是否正确安装并在环境变量中配置。可以使用以下命令检查Maven是否正确配置: mvn -version 如果输出了Maven的版本信息,则说明Maven已经正确安装并在环境变量中配置了。如果没有输出,则需要重新安装或配置Maven…

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