如何在 Java 中反转链表2025年5月14日 | 11 分钟阅读 在本节中,我们将讨论如何在 Java 中反转链表。反转链表是面试中最常问的主题之一。任务是反转一个链表,给定链表的头节点或第一个节点。 给定:链表的头节点或第一个节点(在本例中为 4) 4 -> 6 -> 7 -> 1 -> 5 - > 8 -> 3 -> 2 -> NULL 返回 2 -> 3 -> 8 -> 5 -> 1 -> 7 -> 6 -> 4 -> NULL 给定 3 -> NULL 返回 3 -> NULL 给定 NULL 返回 NULL 有两种方法可以解决这个问题。这两种方法是:
让我们先讨论迭代方法。 使用迭代方法反转链表迭代方法涉及以下步骤。 步骤 1:定义三个指针(previous、current 和 next),并将它们初始化如下。 previous = NULL, current = head, next = NULL。 步骤 2:使用循环遍历链表,并执行以下操作。 实施以下代码显示了使用上述步骤实现链表反转的方法。 文件名:LinkedListIterative.java 输出 The Linked list before reversal is: 4 6 7 1 5 8 3 2 After reversal, the linked list is: 2 3 8 5 1 7 6 4 时间与空间复杂度:上述程序的 time complexity 为 O(n),而 space complexity 为 O(1),其中 n 代表列表中节点的总数。 使用递归方法反转链表递归方法涉及以下步骤。 步骤 1:将给定的列表分成两部分——第一个节点和链表的其余部分。 步骤 2:为链表的其余部分调用 reverseList() 方法。 步骤 3:将其余部分连接到第一个节点。 步骤 4:固定头指针。 实施以下代码显示了使用上述步骤实现链表反转的方法。 文件名:LinkedListRecursive.java 输出 The Linked list before reversal is: 4 6 7 1 5 8 3 2 After reversal, the linked list is: 2 3 8 5 1 7 6 4 时间与空间复杂度:上述程序的 time complexity 为 O(n),而 space complexity 为 O(1),其中 n 代表列表中节点的总数。请注意,上述程序使用内置堆栈,因为它是递归的。为简单起见,我们忽略了内置堆栈占用的空间。 使用堆栈反转链表当使用堆栈反转链表时,会用到以下步骤。 步骤 1:将节点的值存储在堆栈中,直到所有节点的值都已录入。 步骤 2:使用列表中最后一个节点的值更新头指针。 步骤 3:不断从堆栈中移除节点值,并将它们附加到头节点,直到堆栈为空。 步骤 4:确保在附加工作完成后,列表的最后一个节点指向 NULL。 实施以下代码显示了使用上述步骤实现链表反转的方法。 文件名:LinkedListStack.java 输出 The Linked list before reversal is: 4 6 7 1 5 8 3 2 After reversal, the linked list is: 2 3 8 5 1 7 6 4 时间与空间复杂度:上述程序的 time complexity 为 O(n),而 space complexity 也为 O(n),其中 n 代表列表中节点的总数。 使用数组反转链表当使用数组反转链表时,会用到以下步骤。 步骤 1:计算给定列表中节点的数量。 步骤 2:创建一个整数数组,其大小等于列表的大小。 步骤 3:遍历列表,并使用从左到右的节点值填充数组。 步骤 4:从数组的末尾逐个取数组元素,并从中创建一个列表,使得数组的最后一个元素构成列表的头节点。数组的倒数第二个元素构成列表的第二个节点,依此类推。 实施以下代码显示了使用上述步骤实现链表反转的方法。 文件名:LinkedListArray.java 输出 The Linked list before reversal is: 4 6 7 1 5 8 3 2 After reversal, the linked list is: 2 3 8 5 1 7 6 4 时间与空间复杂度:上述程序的 time complexity 为 O(n),而 space complexity 也为 O(n),其中 n 代表列表中节点的总数。 下一个主题Arrays-sort-in-java |
java.nio.charset.CharsetDecoder 类有一个内置方法 called unmappableCharacterAction(),该方法返回此解码器在无法映射字符错误实例中的当前操作。在解码过程中,Java 中的 CharsetDecoder 类使用 unmappableCharacterAction() 方法来检索与管理无法映射字符相关的当前 CodingErrorAction...
阅读 2 分钟
反转或镜像二叉树在计算机科学和编程中很常见。它会反转每个节点上左右子树的排列,从而有效地创建原始树的镜像。该过程本质上是在其垂直轴上镜像树。在二叉树中...
阅读9分钟
如何比较两个ArrayList在Java中:Java equals()方法 Java removeAll()方法 Java retainAll()方法 Java ArrayList.contains()方法 Java contentEquals()方法 Java Stream接口 Java equals()方法 Java List接口的equals()方法将指定的对象与列表进行比较以确定其相等性。它覆盖了equals()方法...
5 分钟阅读
Java.lang.Package 具有 getPackages() 函数。调用者的类加载器定义了 Packages,可以通过 package 类获取。该方法返回一个 Package 对象数组,用于表示包。语法:public boolean getPackages(String desiredVersion) 参数:此方法不接受任何参数……
阅读 2 分钟
引言:Java 中的泛型提供了一种强大的方法来提高类型安全性和代码重用性。此系统中的一个关键概念是泛型类型转换,它使程序员在保持类型安全的同时更改对象的类型。借助真实示例,我们将检查...
阅读 4 分钟
在 Java 中,JSON(即 JavaScript Object Notation)在处理服务器端响应时起着非常重要的作用。在 Java 中,我们可以根据 JSON schema 来验证 JSON 文档。为了执行验证,我们使用 networknt JSON Schema 验证器库。使用此库的原因...
阅读 4 分钟
Java 是一种通用且强大的编程语言,以其健壮性和灵活性而闻名。使 Java 成为开发者热门选择的众多特性之一是动态初始化。动态初始化允许您在运行时初始化变量和对象,为您提供更大的...
阅读9分钟
大多数时候,我们需要比较两个日期和日期时间对象。当我们需要从数据库中获取特定日期和时间的数据或根据日期和时间过滤返回的数据时,就需要进行日期比较。为了...
阅读 3 分钟
? 在 Java 中,字符串分割是一项重要且常用的操作。Java 提供了多种分割字符串的方法。但最常见的方法是使用 String 类的 split() 方法。在本节中,我们将学习如何分割一个...
阅读9分钟
super 关键字是一个引用变量,用于引用直接父类的对象。它通常在继承中使用,以访问子类中被重写或隐藏的父类方法、构造函数或变量。当子类……时,super 关键字的使用至关重要。
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India