Как сравнить число в LinkedList с помощью Iterator - PullRequest
0 голосов
/ 15 декабря 2018

У меня есть два связанных списка, каждый список которых представляет собой число.например, список 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 голосов
/ 15 декабря 2018

Чтобы избежать возникновения исключения, вам нужно изменить условие цикла:

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

Однако этого недостаточно, чтобы ваша программа дала правильный ответ, для этого вам нужно немного больше работы.

Предполагая, что нет ведущих нулей, обратите внимание, что:

  • Если одно число имеет меньше цифр, чем другое, то более короткое число будет меньше
  • Если обачисла имеют одинаковое количество цифр, затем первая другая цифра решает, какая из них меньше

Приведенное выше описание должно быть достаточно простым, если вы используете LinkedList из стандартной библиотеки, поскольку оно имеетsize() метод для проверки длины без перебора элементов.Если вы не можете использовать LinkedList и не можете получить размер списка в постоянном времени, вам нужно работать немного усерднее.Рассмотрим следующие шаги реализации:

  • Итерация обоих списков до достижения конца любого из списков (я уже дал вам условие для этого).

  • На каждой итерации сравнивайте цифры: если вы найдете разницу, сохраните ее для дальнейшего использования и не перезаписывайте ее снова в цикле.Вы можете использовать, например, Boolean firstIsSmaller, инициализированный на null и установленный на true или false, когда будет найдена первая другая цифра, в противном случае оставайтесь null до конца цикла.

  • В конце цикла, если один из списков не достиг конца, этот список является большим числом.

  • Если оба списка достиглизавершите одновременно, затем используйте firstIsSmaller, чтобы решить, какое число меньше.Когда firstIsSmaller равно null, это означает, что никакой разницы не найдено, числа равны.В противном случае логическое значение определяет, будет ли первое меньше или нет.

...