Java 中用链表表示的数字相加2024年9月26日 | 阅读时长 8 分钟 这是一个非常有趣的问题,经常出现在 Google、Amazon、TCS、Accenture 等顶级 IT 公司的面试中。通过解决这个问题,面试官希望检验面试者的逻辑能力、批判性思维和解决问题的能力。因此,在本节中,我们将用不同的方法和逻辑来解决 如何在 Java 中将链表表示的数字相加。同时,我们还将为此创建 Java 程序。 问题陈述给出两个链表。每个链表代表一个数字。任务是找出每个链表所表示的数字之和。答案必须以链表的形式给出。请看以下示例。 示例 1 输入 L1 = 7 -> 9 -> 0 -> 5 -> 9 -> 1 -> 2 -> NULL L2 = 5 -> 3 -> 8 -> 4 -> 3 -> 6 -> 4 -> NULL 输出: 1 -> 3 -> 2 -> 9 -> 0 -> 2 -> 7 -> 6 -> NULL 解释: 链表 L1 表示的数字是 7905912,链表 L2 表示的数字是 5384364,它们的和是 7905912 + 5384364 = 13290276。 示例 2 输入 L1 = 9 -> 8 -> 0 -> 4 -> 3 -> 6 -> 2 -> NULL L2 = 8 -> 5 -> 7 -> NULL 输出: 9 -> 8 -> 0 -> 5 -> 2 -> 1 -> 9 -> NULL 解释: 链表 L1 表示的数字是 9804362,链表 L2 表示的数字是 857,它们的和是 9804362 + 857 = 9805219。 问题解决方案方法:使用递归我们知道两个数字的和可以通过从右到左相加数字来找到。因此,需要反转给定的链表。但是,我们不会真正反转链表。我们将使用递归来模拟相同的操作。我们将进行我们在小学学到的基本加法。在找到和之后,构建一个新的链表来显示和。下面提到了相同的图示。 文件名: NumberSumLinkedList.java 输出 First List is 7 9 0 5 9 1 2 Second List is 5 3 8 4 3 6 4 Resultant List is 1 3 2 9 0 2 7 6 First List is 9 8 0 4 3 6 2 Second List is 8 5 7 Resultant List is 9 8 0 5 2 1 9 复杂度分析: 由于加法需要遍历两个链表。因此,程序的时间复杂度是 O(a + b),其中 a 是第一个链表中元素的总数,b 是第二个链表中元素的总数。程序的空间复杂度也是 O(a + b),因为我们还需要存储结果链表。 方法: 使用迭代在这个方法中,我们将使用一个栈来存储两个链表的元素。我们知道栈的工作方式是后进先出 (LIFO)。因此,最后一个节点将首先被弹出。对从两个链表中弹出的元素执行加法操作。 文件名: MajorityEle1.java 输出 First List is 7 9 0 5 9 1 2 Second List is 5 3 8 4 3 6 4 Resultant List is 1 3 2 9 0 2 7 6 First List is 9 8 0 4 3 6 2 Second List is 8 5 7 Resultant List is 9 8 0 5 2 1 9 复杂度分析: 程序的时间和空间复杂度与上述相同。 下一个主题Java 中数组中的多数元素 |
我们请求您订阅我们的新闻通讯以获取最新更新。