java - 如何使用迭代器比较 LinkedList 中的数字
问题描述
我有两个链表,每个链表代表一个数字。例如,列表 1 表示数字 29,第二个表示数字 7。我想为这两个链表实现运算符 less equal,其工作方式如下:如果第一个链表表示的数字小于第二个返回 true。如果不返回false。最重要的是只检查一次每个链表。所以使用在linkedlist 中定义的size & get 方法是没有用的。
当链表表示的两个数字具有不同的长度大小时,我面临的问题。例如 10?1 应该返回 false。为 1?10 它应该返回 true 并且还返回 10 ?10. 每个数字由一个链表表示。
我想通过迭代器遍历一个或两个链表,以了解第一个链表表示的数字是否小于另一个。
我写了一个代码,它只在数字表示相同长度时才有效,例如 29?45还是7?6等
Iterator<T> iter1 = a1.Iterator();
Iterator<T> iter2 = a2.Iterator();
while (iter1.hasNext()) {
if (!(iter1.next().lessEqual(iter2.next()))) //if iter2 !hasNext this will throw exception; for ex 1?10
return false;
}
return true;
我如何实现以链表表示的不同大小的数字来修复它?请注意,整数中的每个数字都在链接中分配。例如 294。数字 2 在当前链表的第一个链接中,9 在第二个链接中,4 在当前链表的第三个链接中。
解决方案
为避免抛出异常,您需要更改循环条件:
while (iter1.hasNext() && iter2.hasNext()) {
然而,这还不足以让你的程序给出正确的答案,因为你需要做更多的工作。
假设没有前导零,请注意:
- 如果一个数字的位数少于另一个,则数字越短越小
- 如果两个数字的位数相同,则第一个不同的数字决定哪个更小
LinkedList
如果您从标准库中使用,上述内容应该很容易实现,因为它有一种size()
方法可以检查长度而无需迭代元素。如果您不能使用LinkedList
并且无法在恒定时间内获得列表的大小,那么您需要更加努力。考虑以下实施步骤:
迭代这两个列表,直到到达任何列表的末尾(我已经给了你条件)。
在每次迭代中,比较数字:如果发现差异,则将其保存以备后用,并且不要在循环中再次覆盖它。例如,您可以使用 a
Boolean firstIsSmaller
,初始化为null
,并设置为true
orfalse
当找到第一个不同的数字时,否则一直停留null
到循环结束。在循环结束时,如果列表之一没有到达末尾,则该列表是较大的数字。
如果两个列表同时到达末尾,则使用
firstIsSmaller
来决定哪个数字更小。当firstIsSmaller
是null
,这意味着没有发现差异,数字是相等的。否则布尔值决定第一个是否更小。
推荐阅读
- solr - 按常数排序
- flutter - FutureBuilder 不会等到未来完成
- c++ - Qt保持gui响应
- api - Flutter从API调用的地图内的列表中提取数据
- sql - 如何在 Postgres 中加入 2 个以 2 个不同列为条件的表?
- reactjs - 来自 React 上的引导模板的 data-setbg
- javascript - WordPress - 未捕获的不变违规:缩小的 React 错误 #200
- asp.net - IIS 10.0 http 500 在 kb5001402 和 1347 之后读取 .txt 错误
- java - 使用 LWJGL 3.2.3 build 13 创建基本 GLFW 窗口时出错
- python - matplotlib 是否可以使用带有垂直渐变和列边框的自定义宽度条创建条形图?