返回

反转链表之尾到头输出

见解分享

对于链表,我们经常需要从头到尾或从尾到头遍历链表中的元素。从头到尾遍历链表比较简单,因为我们可以直接使用链表的头结点作为起始点,然后逐个遍历链表中的元素。但是,从尾到头遍历链表就需要一些技巧了。

一种方法是使用栈数据结构。我们将链表中的元素逐个压入栈中,然后从栈中弹出元素即可得到链表中元素从尾到头的顺序。

另一种方法是使用递归。我们可以将链表分为两部分:头结点和剩余部分。然后,我们先对剩余部分进行递归调用,得到剩余部分中元素从尾到头的顺序。最后,我们将头结点的元素添加到剩余部分元素的前面,即可得到链表中元素从尾到头的顺序。

下面我们来看一个具体的例子。假设我们有一个链表,其中包含以下元素:1、2、3、4、5。我们想要将链表中的元素从尾到头输出。

我们可以使用栈数据结构来实现。我们将链表中的元素逐个压入栈中,然后从栈中弹出元素即可得到链表中元素从尾到头的顺序。

public class Main {

    public static void main(String[] args) {
        // 创建一个链表
        LinkedList<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);

        // 使用栈数据结构将链表中的元素压入栈中
        Stack<Integer> stack = new Stack<>();
        for (Integer element : list) {
            stack.push(element);
        }

        // 从栈中弹出元素即可得到链表中元素从尾到头的顺序
        while (!stack.isEmpty()) {
            System.out.println(stack.pop());
        }
    }
}

输出结果为:

5
4
3
2
1

我们也可以使用递归来实现。我们可以将链表分为两部分:头结点和剩余部分。然后,我们先对剩余部分进行递归调用,得到剩余部分中元素从尾到头的顺序。最后,我们将头结点的元素添加到剩余部分元素的前面,即可得到链表中元素从尾到头的顺序。

public class Main {

    public static void main(String[] args) {
        // 创建一个链表
        LinkedList<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);

        // 使用递归将链表中的元素从尾到头输出
        printLinkedList(list);
    }

    public static void printLinkedList(LinkedList<Integer> list) {
        if (list.isEmpty()) {
            return;
        }

        // 将链表分为两部分:头结点和剩余部分
        Integer head = list.removeFirst();
        LinkedList<Integer> tail = list;

        // 对剩余部分进行递归调用
        printLinkedList(tail);

        // 将头结点的元素添加到剩余部分元素的前面
        System.out.println(head);
    }
}

输出结果为:

5
4
3
2
1

以上就是两种从尾到头输出链表元素的方法。读者可以根据自己的需要选择合适的方法。