这道题熟悉容器的童鞋,第一反应当然是用stack。注意这里stack的基本使用和C++还是有些许不同的。
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<>();
Stack<Integer> stack = new Stack<>();
while(null != listNode){
stack.push(listNode.val);
listNode = listNode.next;
}
while(!stack.empty()){
list.add(stack.pop());
}
return list;
}
}
当然最简单的还是用递归思想,stack的底层也是运用递归思想。
递归一:一般首先想到的是内部递归,内部递归注意每次把递归结果赋值给list。
/**
* 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) {
ArrayList<Integer> list = new ArrayList<>();
if(null == listNode){
return list;
}
list = printListFromTailToHead(listNode.next);
list.add(listNode.val);
return list;
}
}
递归二: 类变量式递归,最简洁递归。
/**
* 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 {
ArrayList<Integer> list = new ArrayList<>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if(null == listNode){
return list;
}
printListFromTailToHead(listNode.next);
list.add(listNode.val);
return list;
}
}