描述
输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。
如输入{1,2,3}的链表如下图:
返回一个数组为[3,2,1]
0 <= 链表长度 <= 10000
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
1、递归 250ms 19168KB
public class Solution {
ArrayList<Integer> lista = new ArrayList<Integer>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if (listNode!=null){
printListFromTailToHead(listNode.next);
lista.add(listNode.val);
}
return lista;
}
}
2、栈 194ms 16356KB
public class Solution {
Stack<Integer> a = new Stack<Integer>();
ArrayList<Integer> b = new ArrayList<Integer>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
while (listNode!=null){
a.push(listNode.val);
listNode = listNode.next;
}
while(!a.isEmpty()){
b.add(a.pop());
}
return b;
}
}
3、反转list 201ms 17764KB
import java.util.Collections;
public class Solution {
ArrayList<Integer> b = new ArrayList<Integer>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
while (listNode!=null){
b.add(listNode.val);
listNode = listNode.next;
}
Collections.reverse(b);
return b;
}
}
4、函数 209ms 18164KB
public class Solution {
ArrayList<Integer> a = new ArrayList<Integer>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
while (listNode!=null){
a.add(0,listNode.val);
listNode = listNode.next;
}
return a;
}
}