📜  在Java中以相反的顺序迭代 LinkedList(1)

📅  最后修改于: 2023-12-03 15:07:53.595000             🧑  作者: Mango

在Java中以相反的顺序迭代 LinkedList

在Java中,我们通常使用迭代器(Iterator)来遍历 LinkedList 中的元素,但是默认情况下迭代器是从前往后遍历的。如果我们想要以相反的顺序迭代 LinkedList,该怎么办呢?

下面给出两种方法:

方法一:使用 ListIterator

ListIterator 是 Iterator 的子类,它比 Iterator 多了一些方法,其中一个方法是 hasPrevious(),它可以用来检查是否还有前一个元素可以迭代。我们可以利用 ListIterator 来实现以相反的顺序迭代 LinkedList。

List<Integer> list = new LinkedList<>();
list.add(1);
list.add(2);
list.add(3);

ListIterator<Integer> iterator = list.listIterator(list.size());
while (iterator.hasPrevious()) {
    Integer element = iterator.previous();
    System.out.println(element);
}

在这段代码中,我们先获取 LinkedList 的 ListIterator,然后将 ListIterator 指针移动到最后一个元素的位置(使用 list.size()),接着利用 hasPrevious() 方法循环遍历 LinkedList 所有元素,每次迭代时使用 previous() 方法获取前一个元素。

方法二:倒序遍历

除了使用 ListIterator,我们还可以直接使用 for 循环来倒序遍历 LinkedList。

List<Integer> list = new LinkedList<>();
list.add(1);
list.add(2);
list.add(3);

for (int i = list.size() - 1; i >= 0; i--) {
    Integer element = list.get(i);
    System.out.println(element);
}

在这段代码中,我们利用 for 循环倒序遍历 LinkedList 所有元素,每次迭代时使用 get() 方法获取对应位置的元素。需要注意的是,由于 LinkedList 是链式结构,所以 get() 方法的时间复杂度是 O(n),比 ListIterator 的 O(1) 要慢。

以上就是以相反的顺序迭代 LinkedList 的两种方法。如果需要大量遍历或者需要删除元素,建议使用 ListIterator。如果只是简单遍历或者不需要频繁访问元素,可以使用倒序遍历。