题目
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
程序核心思想
- 从“从尾到头”就可以联想到栈,所以这个题目用java中自带的栈来解决“从尾到头”的要求。把所有的节点值入栈,然后节点值出栈进入ArrayList,最后返回ArrayList即可。
- 剩下来就是链表遍历的问题了。可以new一个节点,指向链表头,然后依次指向后面的节点,进行遍历,直到链表结尾为止(new的节点指向的节点的next为null)。
Tips
- 栈的使用
创建:Stack<Integer> stack = new Stack<Integer>();
入栈:stack.push(括号里填入栈的东西,类型为创建时泛型的类型)
出栈:stack.pop();
判断栈是否为空:stack.empty(); - ArrayList的使用
创建:ArrayList<Integer> array = new ArrayList<Integer>();
添加元素:array.add(括号里填添加的东西,类型为创建时泛型的类型)
代码
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
Stack<Integer> stack = new Stack<Integer>();
ArrayList<Integer> array = new ArrayList<Integer>();
ListNode node = new ListNode(0);
node.next = listNode;
while(node.next != null){
stack.push(node.next.val);
node.next = node.next.next;
}
while(!stack.empty()){
array.add(stack.pop());
}
return array;
}
}