Java 实现链表结点插入

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日

相关文章

  • php文件后缀不强制为.php的实操方法

    攻略:修改PHP文件后缀为非.php 在默认情况下,PHP文件的后缀名应为.php,但是有时候我们可能需要将PHP文件的后缀名修改为其他扩展名,例如.html或.txt。下面是修改PHP文件后缀的实操方法的详细攻略。 步骤一:修改Web服务器配置 首先,我们需要修改Web服务器的配置,以便它能够正确解析我们修改后的PHP文件后缀。以下是针对一些常见Web服务…

    other 2023年8月5日
    00
  • information_schema.routines 学习

    information_schema.routines 学习 在 MySQL 数据库中,information_schema.routines 是一个保存 MySQL 存储过程和函数信息的系统表。它提供了存储过程和函数的详细信息,例如名称、参数、返回类型、定义、创建日期和最后更改日期等。 怎么使用 information_schema.routines 你可…

    其他 2023年3月28日
    00
  • C++递归删除一个目录实例

    要递归删除一个目录,可以使用以下步骤: 使用built-in函数或者第三方库来获取目录下的所有文件和子目录 遍历所有子目录,并递归调用删除子目录的函数 遍历所有文件,并通过系统调用或者库函数将其删除 最终删除根目录 下面是一个标准的C++代码示例,调用了Windows API函数来实现删除目录的操作: #include <iostream> #i…

    other 2023年6月27日
    00
  • 魔兽世界7.3.5武器战怎么堆属性 wow7.35武器战配装属性优先级攻略

    魔兽世界7.3.5武器战怎么堆属性 基本属性 “命中”属性为首要属性,尽量以达到百分之百命中为目标; 一定程度上考虑“暴击”和“急速”; 根据自己的最大生命值,增加“全能”属性,提升自身的生存能力。 示例一: 前两个属性为命中和暴击,全能属性的增加加强了生存能力。 命中 > 暴击 > 急速 > 全能 头部:重盔 项链:鲜血项链之链 肩甲:穆…

    other 2023年6月27日
    00
  • 使用PHP批量生成随机用户名

    下面是使用PHP批量生成随机用户名的完整攻略。 步骤一:生成随机的用户名 我们可以通过PHP内置函数来生成随机的用户名,比如使用uniqid()函数,该函数可以返回一个前缀为当前时间的唯一ID字符串。我们可以将这个ID字符串截取前6位作为我们的随机用户名,代码如下: $username = substr(uniqid(), 0, 6); 步骤二:存储用户名 …

    other 2023年6月27日
    00
  • 鸿蒙系统开发者模式如何进入?鸿蒙系统进入开发者模式的方法

    进入鸿蒙系统的开发者模式,需要经过以下步骤: 打开鸿蒙系统的设置应用:在主屏幕或应用列表中找到“设置”应用,点击进入。 找到“系统”选项:在设置应用中,向下滑动屏幕直到找到“系统”选项,点击进入。 进入“关于手机”页面:在“系统”页面中,向下滑动到最底部,点击“关于手机”进入详细信息页面。 找到“版本号”选项:在“关于手机”页面中,找到“版本号”选项,连续点…

    other 2023年6月26日
    00
  • 二进制图片blob数据转canvas

    二进制图片blob数据转canvas攻略 在Web开发中,我们经常需要将二进制图片数据转换为canvas对象,以便进行进一步的处理和操作。在本攻略中,我们将介绍如何将二进制blob数据转换为canvas,并提供一些示例说明。 步骤1:获取二进制图片数据 在将二进制图片数据转换canvas对象之前,我们需要先获取二进制图片数据。以下是一个示例: fetch(‘…

    other 2023年5月9日
    00
  • Java实现按照大小写字母顺序排序的方法

    Java实现按照大小写字母顺序排序的方法 在Java中,可以使用java.util.Collections类的sort方法来按照大小写字母顺序对字符串进行排序。下面是一个完整的攻略,包含了两个示例说明。 示例1:对字符串数组进行排序 import java.util.Arrays; import java.util.Collections; public c…

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