Java LinkedList итератор: удалить текущий элемент и все элементы после него - PullRequest
0 голосов
/ 08 сентября 2018

Теоретически, LinkedList позволяет вам легко удалять хвост списка в постоянное время, просто устанавливая удаленную ссылку на ноль.

На практике, как Java LinkedList позволяет вам это делать?

Например:

Iterator<Integer> iterator = linkedList.iterator();
while (iterator.hasNext()) {
  if (iterator.next() % 2 == 0) {
    iterator.removeAllAfterThisPoint(); // how can we do this?
  }
}

1 Ответ

0 голосов
/ 08 сентября 2018

Если я понял ваш вопрос, вы пытаетесь удалить все элементы из LinkedList после первого четного числа. Мое решение состоит в том, чтобы получить индекс, по которому происходит четное число, и использовать subList(fromIndex, toIndex), чтобы удалить все элементы после toIndex.

public static void main(String[] args) {
        List<Integer> list = new LinkedList<>(Arrays.asList(3, 7, 9, 2, 4, 5, 17));
        ListIterator<Integer> iterator = list.listIterator();
        int toIndex = 0;
        while (iterator.hasNext()) {
            if (iterator.next() % 2 == 0) {
                toIndex = iterator.nextIndex();
                break;
            }
        }
        list = list.subList(0, toIndex);
        list.forEach(System.out::println);
    }

Введите:

3
7
9
2
4
5
17

Выход:

3
7
9
2
...