我有两个链接列表,每个列表代表一个数字。 例如,列表1代表29,而第二个代表7。 我想为这两个链表实现小于等于的运算符,其工作方式如下: 如果由第一个链表表示的数字小于等于第二个,则返回true。如果没有返回false。 最重要的是只一次浏览每个链表。因此,使用在链表中定义的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在第三链接中。
答案 0 :(得分:0)
为避免引发异常,您需要更改循环条件:
while (iter1.hasNext() && iter2.hasNext()) {
但这还不足以使您的程序给出正确的答案,因为您需要做更多的工作。
假设没有前导零,请注意:
如果您使用标准库中的LinkedList
,则上面的代码应该很容易实现,因为它具有size()
方法来检查长度而无需遍历元素。
如果您无法使用LinkedList
,并且无法在恒定时间内获得列表的大小,那么您需要加倍努力。
请考虑以下实现步骤:
迭代两个列表,直到到达任何列表的末尾(我已经为您提供了条件)。
在每次迭代中,比较数字:如果发现差异,则将其保存以备后用,不要在循环中再次覆盖它。例如,您可以使用Boolean firstIsSmaller
,将其初始化为null
,并在找到第一个不同数字时将其设置为true
或false
,否则请停留null
直到循环结束。
在循环结束时,如果列表之一未到达末尾,则该列表是较大的数字。
如果两个列表同时到达末尾,则使用firstIsSmaller
来确定哪个数字较小。当firstIsSmaller
为null
时,表示没有差异,数字相等。否则,布尔值将确定第一个是否较小。