返回
反转链表之尾到头输出
见解分享
2024-02-25 15:06:57
对于链表,我们经常需要从头到尾或从尾到头遍历链表中的元素。从头到尾遍历链表比较简单,因为我们可以直接使用链表的头结点作为起始点,然后逐个遍历链表中的元素。但是,从尾到头遍历链表就需要一些技巧了。
一种方法是使用栈数据结构。我们将链表中的元素逐个压入栈中,然后从栈中弹出元素即可得到链表中元素从尾到头的顺序。
另一种方法是使用递归。我们可以将链表分为两部分:头结点和剩余部分。然后,我们先对剩余部分进行递归调用,得到剩余部分中元素从尾到头的顺序。最后,我们将头结点的元素添加到剩余部分元素的前面,即可得到链表中元素从尾到头的顺序。
下面我们来看一个具体的例子。假设我们有一个链表,其中包含以下元素: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
以上就是两种从尾到头输出链表元素的方法。读者可以根据自己的需要选择合适的方法。