题目描述
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
实现
方法1:栈:先进后出
方法2:递归
public class C06_list_PrintList {
public static class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
// 方法1:先进后出-栈
public static void printList(ListNode head) {
Stack<ListNode> stack = new Stack<>();
if (head == null) {
return;
}
ListNode node = head;
while (node != null) {// 入栈
stack.push(node);
node = node.next;
}
while (!stack.isEmpty()) {// 出栈打印
node = stack.peek();
System.out.println(node.val);
stack.pop();
}
}
//方法2:递归的本质是一个栈结构
public static void printList2(ListNode head) {
if (head != null) {
if (head.next != null) {
printList2(head.next);
}
System.out.println(head.val);
}
}
}
Test
public static void main(String[] args) {
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);
node1.next = node2;
node2.next = node3;
ListNode head = node1;
while (head != null) {
System.out.println(head.val);
head = head.next;
}
System.out.println("-----------");
PrintList(node1);
System.out.println("-----------");
PrintList2(node1);
}