如何使用迭代器比较LinkedList中的数字

时间:2018-12-15 11:31:30

标签: java linked-list iterator

我有两个链接列表,每个列表代表一个数字。 例如,列表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在第三链接中。

1 个答案:

答案 0 :(得分:0)

为避免引发异常,您需要更改循环条件:

while (iter1.hasNext() && iter2.hasNext()) {

但这还不足以使您的程序给出正确的答案,因为您需要做更多的工作。

假设没有前导零,请注意:

  • 如果一个数字比另一个数字少,数字越短越小
  • 如果两个数字的位数相同,则第一个不同的数字将决定哪个数字较小

如果您使用标准库中的LinkedList,则上面的代码应该很容易实现,因为它具有size()方法来检查长度而无需遍历元素。 如果您无法使用LinkedList,并且无法在恒定时间内获得列表的大小,那么您需要加倍努力。 请考虑以下实现步骤:

  • 迭代两个列表,直到到达任何列表的末尾(我已经为您提供了条件)。

  • 在每次迭代中,比较数字:如果发现差异,则将其保存以备后用,不要在循环中再次覆盖它。例如,您可以使用Boolean firstIsSmaller,将其初始化为null,并在找到第一个不同数字时将其设置为truefalse,否则请停留null直到循环结束。

  • 在循环结束时,如果列表之一未到达末尾,则该列表是较大的数字。

  • 如果两个列表同时到达末尾,则使用firstIsSmaller来确定哪个数字较小。当firstIsSmallernull时,表示没有差异,数字相等。否则,布尔值将确定第一个是否较小。