Identical Linked List in Java2025 年 5 月 5 日 | 阅读 6 分钟 相同的链表是指两个链表包含相同的数据且顺序也相同。要在 Java 中判断两个链表是否相同,我们可以通过迭代或递归的方式比较对应的节点。这涉及到同时检查数据和结构,直到所有节点都匹配或发现不匹配项。 示例 输入 列表1 1, 2, 3, 4 列表2 1, 2, 3, 4 输出 链表是相同的。 解释 "链表是相同的",因为两个列表具有相同的数值序列:1、2、3 和 4。每个列表中对应的节点都具有相同的数据,并且两个列表同时结束,没有数据或结构上的不匹配。 示例 2 输入 列表1 1, 2, 3, 4 列表2 1, 2, 5, 4 输出 链表不相同。 解释 "链表不相同",因为数据存在不匹配。虽然两个列表的前两个节点具有相同的值(1 和 2),但列表 1 的第三个节点的值是 3,而列表 2 的第三个节点的值是 5。这种不匹配使得链表不同。 方法 1:逐节点迭代比较算法 步骤 1:初始化指针: 使用两个指针,current1 和 current2,分别指向第一个和第二个链表的头节点。 步骤 1.1: 检查空指针 在继续之前,请确保头指针(current1 或 current2)都不是 null。 如果两者都为 null,则链表相同,因为它们都是空的。如果只有一个为 null,则链表不相同,因为一个链表为空而另一个不为空。 步骤 2:遍历两个列表: 使用循环,只要 current1 和 current2 都不为 null,就遍历这两个列表。在每一步,比较 current1 和 current2 中存储的数据。 步骤 3:检查不匹配: 如果当前节点(current1.data 和 current2.data)的数据不匹配,则立即得出链表不相同的结论并退出循环。 步骤 4:移动到下一个节点: 如果数据匹配,则将两个指针(current1 和 current2)都移动到它们各自的下一个节点。 步骤 5:检查结束条件: 退出循环后,检查两个指针是否都为 null。如果两个指针都为 null,则表示两个列表具有相同的长度和结构,并且所有数据都匹配。得出链表相同的结论。如果一个指针为 null 而另一个不为 null,则链表在长度或结构上有所不同,因此不相同。 步骤 6:返回结果: 根据上述条件,如果链表相同则返回 true,否则返回 false。 文件名:IdenticalLinkedList.java 输出 The linked lists are identical 复杂度分析空间复杂度检查两个链表是否相同的时空复杂度为 O(n),其中 n 是较短链表的长度。这是因为算法同时遍历两个列表,直到找到不匹配项或两个列表都完全遍历完毕。 空间复杂度检查两个链表是否相同的空间复杂度为 O(1)。这是因为算法只使用固定量的额外空间用于遍历链表的指针。没有使用其他 数据结构 或递归调用,因此在内存方面效率很高。 方法 2:使用递归逐节点比较递归逐节点比较方法通过递归比较节点来检查两个链表是否相同。从头开始,它会验证每个节点的 数据和结构,然后继续到下一个节点,直到链表结束或出现不匹配。对于链表中清晰、分步的比较,它很有效。 算法步骤 1:定义基本情况: 两个列表都为空:如果两个头指针(head1 和 head2)都为 null,则表示两个列表都为空。在这种情况下,链表相同,因此我们返回 true。一个列表为空,而另一个不为空 如果一个头指针为 null 而另一个不为 null,则链表的长度或结构不同。在这种情况下,我们返回 false,因为链表不相同。 步骤 2:比较当前节点: 如果两个头指针都不为 null,则比较当前节点(head1.data 和 head2.data)的数据值。如果数据值不相等,则表示链表不相同,因此返回 false。如果数据值匹配,则继续比较两个列表中的下一个节点。 步骤 2.1:处理数据不匹配: 如果当前节点(head1.data 和 head2.data)的数据不匹配,则链表不相同。在这种情况下,立即返回 false,而不继续处理后续节点。这可以确保算法在找到不匹配项时立即停止,从而节省不必要的比较。 步骤 3:递归检查剩余节点: 在两个列表的下一个节点(head1.next 和 head2.next)上调用相同的 函数。此递归调用的结果决定了链表的其余部分是否相同。如果在任何时候发生不匹配,该函数将返回 false。 步骤 3.1:递归调用逻辑: 要检查剩余的节点,请使用两个列表的下一个节点(head1.next 和 head2.next)调用相同的函数。这会继续比较链表的其余部分。如果递归调用返回 true,则表示剩余节点相同。否则,立即返回 false。 步骤 4:返回结果: 如果函数成功达到两个指针都为 null 的基本情况,则表示所有节点都匹配,链表相同。如果在过程中出现任何比较失败,则函数返回 false。 步骤 5:输出结果: 递归函数完成后,使用其返回值显示结果。如果函数返回 true,则打印链表相同。否则,打印链表不相同。此步骤总结了用户或调用程序的比较结果。 文件名:IdenticalLinkedListRecursive.java 输出 The linked lists are identical 复杂度分析时间复杂度此递归算法的时空复杂度为 O(n),其中 n 是较短链表的长度。这是因为算法遍历两个链表中的每个节点恰好一次,比较对应的节点,直到到达链表末尾或找到不匹配项。 空间复杂度递归算法的空间复杂度为 O(n),这是由于调用堆栈。每次递归调用都会向堆栈添加一个帧,该帧与链表中的节点数量成比例。对于大型列表,与迭代方法相比,这可能会导致 内存 使用量增加。 下一主题Java 中的设计原则 |
在 Java 中,堆是所有线程共享的一块内存。在堆中,分配所有类实例和数组。它在 JVM 启动时创建。自动存储管理系统会回收堆。它可以是固定和可变的...
阅读 4 分钟
java.text.CollationElementIterator 类具有 setText() 函数。CollationElementIterator 对象用来迭代的新源字符串是通过 CollationElementIterator 类设置的。语法:public void setText(String source) 参数:迭代器将迭代由该方法传递给它的一个新源字符串。返回值:...
阅读 3 分钟
Java 中的 BreakIterator ious() 方法及示例 java.text.BreakIterator 类包含一个 ious() 方法。通过调用 current() 方法可以获得当前边界,而使用 BreakIterator 类可以获得其后面 ious 边界的索引。它给出了第一个...的偏移量。
阅读 3 分钟
在 Java 中,TreeSet 不是使用最广泛的 Java 集合类。但在某些情况下,它比其他集合类更受欢迎。了解 TreeSet 在哪些情况下比其他集合类更受欢迎以及它是如何实现的至关重要。它...
阅读 3 分钟
双峰序列是信号或数据系列,它先上升然后下降到最小值或达到低谷,即双峰点。这种结构在算法问题中经常出现,需要优化方法来解决。在本文中,我们将学习...
5 分钟阅读
ASCII 是 American Standard Code for Information Interchange(美国信息交换标准代码)的缩写。它是一个 7 位字符集,包含 128 个(0 到 127)字符。它表示字符的数值。例如,A 的 ASCII 值是 65。在本节中,我们将学习如何打印...
阅读 3 分钟
? Java 有不同的版本可用。由于兼容性问题,某些应用程序通常需要不同的版本。在本节中,我们将学习如何在 Windows 中使用 CMD 检查 Java 版本。版本字符串包含版本号,后面可以选择性地跟预发布版本...
阅读 2 分钟
Java 是一种通用且广泛使用的编程语言,其成功很大程度上归功于其强大的面向对象(OOP)架构。Java OOP 应用程序的核心是其对象模型,这是一个定义数据如何组织、组织和操作的关键概念……
阅读 10 分钟
螺旋矩阵就像一个带有数字的网格,以扭曲的模式排列,通常从左上角开始,然后绕圈移动到中心。要在此网格中找到特定的数字,您必须沿着扭曲的路径一直走到...
5 分钟阅读
有时我们希望程序的输出以给定的特定格式打印出来。在 C 编程语言中,这可以使用 printf() 函数来实现。在本节中,我们将讨论不同的输出格式。让我们讨论如何格式化...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India