📅  最后修改于: 2023-12-03 15:23:24.252000             🧑  作者: Mango
LinkedList是Java中的一种线性数据结构,它是由一个个节点组成,每个节点存储了元素以及指向下一个节点的引用。它有如下特点:
反转LinkedList有多种方法,下面列出三种常见的方法:
Collections类中提供了一个用于反转List的方法reverse,可以用于反转LinkedList。
import java.util.Collections;
import java.util.LinkedList;
public class ReverseLinkedList{
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("apple");
list.add("banana");
list.add("orange");
System.out.println("Before Reverse: " + list);
Collections.reverse(list);
System.out.println("After Reverse: " + list);
}
}
输出结果:
Before Reverse: [apple, banana, orange]
After Reverse: [orange, banana, apple]
我们可以使用Stack类来反转LinkedList,将每个元素压入栈中,再依次弹出即可。
import java.util.LinkedList;
import java.util.Stack;
public class ReverseLinkedList{
public static void main(String[] args) {
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("apple");
linkedList.add("banana");
linkedList.add("orange");
System.out.println("Before Reverse: " + linkedList);
Stack<String> stack = new Stack<>();
while (!linkedList.isEmpty()) {
stack.push(linkedList.pop());
}
while (!stack.isEmpty()) {
linkedList.add(stack.pop());
}
System.out.println("After Reverse: " + linkedList);
}
}
输出结果:
Before Reverse: [apple, banana, orange]
After Reverse: [orange, banana, apple]
使用递归的方法也能反转LinkedList。我们可以定义一个递归函数,将链表的第一个节点作为参数传入,然后递归地将其余的节点反转,最后将第一个节点作为最后一个节点返回。
import java.util.LinkedList;
public class ReverseLinkedList {
Node head;
static class Node {
String data;
Node next;
Node(String d) {
data = d;
next = null;
}
}
public Node reverse(Node node) {
if (node == null || node.next == null) {
return node;
}
Node remaining = reverse(node.next);
node.next.next = node;
node.next = null;
return remaining;
}
public void printList(Node node) {
while (node != null) {
System.out.print(node.data + " ");
node = node.next;
}
System.out.println();
}
public static void main(String[] args) {
ReverseLinkedList list = new ReverseLinkedList();
list.head = new Node("apple");
list.head.next = new Node("banana");
list.head.next.next = new Node("orange");
System.out.println("Before reverse: ");
list.printList(list.head);
list.head = list.reverse(list.head);
System.out.println("After reverse: ");
list.printList(list.head);
}
}
输出结果:
Before reverse:
apple banana orange
After reverse:
orange banana apple
反转LinkedList有多种方法,我们可以使用Collections类的reverse方法、Stack类、递归等方法。需要根据实际应用场景选择最合适的方法。