Java 中两个已排序链表的交集2024年9月10日 | 阅读10分钟 在本问题中,给定两个已排序的链表(按非递减顺序排序)。任务是找到这两个链表的交集,即找到同时存在于两个链表中的元素。 示例 1 输入 链表 1: 12 -> 13 -> 35 -> 40 -> 56 -> 89 -> 90 -> 92 链表 2: 9 -> 14 -> 15 -> 30 -> 40 -> 85 -> 90 -> 92 输出 40 -> 90 -> 92 让我们来看看解决这个问题的各种方法。 使用哑节点该方法是在输出列表的开头使用一个哑节点或临时节点。尾指针是指向输出列表最后一个节点的指针,以便可以快速添加或追加新节点。临时节点为尾指针提供了一个可以指向的空间。请注意,最初,尾指针指向输出的哑节点。现在,任务是使用单个循环遍历给定的链表。请注意,如果任何一个链表被完全遍历,循环将终止。在循环中,使用了双指针方法。一个指针 ptr1 用于链表 1,另一个指针 ptr2 用于链表 2。有以下三种情况: 情况 1: ptr1 指向的值大于 ptr2 指向的值。 情况 2: ptr1 指向的值小于 ptr2 指向的值。 情况 3: ptr1 和 ptr2 指向的值相等。 对于情况 1,递增 ptr2 指向下一个节点。对于情况 2,递增 ptr1 指向下一个节点。对于情况 3,打印值并将两个指针都递增到指向下一个节点。在情况 3 中,我们必须处理包含相同值的节点。例如, 链表 1: 4 -> 4 -> 4 -> 4 -> 4 -> 4 -> 5 链表 2: 4 -> 4 -> 4-> 5 这里,情况 3 适用,因为两个链表的第一个节点都是 4。因此,我们打印值 4,并将 ptr1 和 ptr2 递增到指向下一个节点。然而,即使递增之后,ptr1 和 ptr2 都指向相同的值 4。因此,我们必须再次递增两个指针;但这次我们不会打印值 4,因为 4 已经打印过了,我们将继续递增指针,直到两个指针都指向值 5。 因此,输出是 4 和 5。请注意,这里的交集的工作方式与我们在“集合”章节中学习的交集的工作方式相同。 观察下面的程序。 文件名: LinkedListIntersection.java 输出 The first linked list is: 12 13 35 40 56 89 90 92 The second linked list is: 9 14 15 30 40 85 90 92 The common elements of the first & the second linked list are: 40 90 92 The first linked list is: 4 4 4 4 4 5 The second linked list is: 4 4 4 5 The common elements of the first & the second linked list are: 4 5 时间复杂度: 上述程序的 time complexity 为 O(min(a, b)),其中 a 和 b 分别是链表 1 和 2 中存在的元素或节点的数量。 使用递归使用递归也可以实现相同的功能。 文件名: LinkedListIntersection1.java 输出 The first linked list is: 12 13 35 40 56 89 90 92 The second linked list is: 9 14 15 30 40 85 90 92 The common elements of the first & the second linked list are: 40 90 92 使用哈希众所周知,Java 中的 HashSet 只包含唯一元素;因此,我们可以利用此属性来查找给定两个链表中的公共元素。观察以下程序。 文件名: LinkedListIntersection2.java 输出 The first linked list is: 12 13 35 40 56 89 90 92 The second linked list is: 9 14 15 30 40 85 90 92 The common elements of the first & the second linked list are: 40 90 92 时间复杂度: 由于我们分别遍历两个链表,因此上述程序的 time complexity 为 O(a + b),其中 a 和 b 是给定链表中存在的节点总数。 下一个主题Java 中的设置矩阵零 |
| Java 中 BigDecimal 转换为 String 在 Java 中,BigDecimal 是 java.math 包中的一个类,而该包属于 java.base 模块。它扩展了 Number 类并实现了 Comparable<BigDecimal> 接口。BigDecimal 类提供了算术、标度操作、舍入、比较等操作...
阅读 2 分钟
许多程序员在参加编程竞赛时会遇到“Time Limit Exceeded”(TLE)错误,这使得他们难以评估解决方案的有效性。由于效率低下的方法、过多的循环或不必要的计算,程序运行时间过长,就会出现“Time Limit Exceed”问题。为了克服……
5 分钟阅读
? 继承的概念允许类继承其他类的特性和属性。它是 OOP 的基本概念。因为在单继承中,一个类只能从一个超类继承。但是,Java 通过接口提供了实现多重继承的方式。使用接口,...
5 分钟阅读
Java 中静态方法的覆盖(Shadowing)是指在同一作用域内存在两个同名静态方法。第一个方法被称为被第二个方法覆盖。当...时,第二个方法将优先于第一个方法...
阅读 3 分钟
Java 是最广泛使用的编程语言之一,它不断发展以提高开发人员的生产力和代码可读性。随着 Java 10 的发布,引入了 var 关键字,允许开发人员声明局部变量而不必显式指定其数据类型。这项功能带来了...
阅读 4 分钟
在 Java 中,int、char 和 float 等原始数据类型变量是按值传递的。这意味着变量值的副本会被发送到方法或函数。然而,在传递 String 等对象时,按引用传递的区别……
阅读 4 分钟
图像处理是计算机科学领域一个引人入胜的领域,涵盖了分析和操作图像的广泛操作。在图像处理中最基本但又最有趣的任务之一是生成具有随机彩色像素的图像。这项任务可以作为...
阅读 4 分钟
Java 是一种通用的编程语言,拥有一套丰富的特性,可满足各种编程需求。从简单的应用程序到复杂的系统,Java 提供了许多工具和技术来处理各种编程挑战。其中一些棘手的程序是...
阅读9分钟
在 Java 中,“绑定”一词描述了 Java 编译器将对方法或函数在语句主体中的调用的关联方式。简单来说,绑定就是 Java 编译器在调用时查找适当方法的过程...
阅读 4 分钟
在 Java 中,ServerSocket 可以定义为一种类,主要用于为客户端或服务器提供服务器端套接字连接的实现。此外,客户端或客户端的套接字连接与系统完全独立。让我们来了解一下 ServerSocket 类...
阅读20分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India