Java LinkedList迭代器:删除当前元素及其后的所有元素

时间:2018-09-08 16:47:17

标签: java data-structures linked-list

从理论上讲,通过将已删除的引用设置为null,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 :(得分:0)

如果我理解您的问题,则您正在尝试从第一个偶数之后的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