题目:
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
解答:
①利用Collections里reverse函数
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
import java.util.Collections;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> ans=new ArrayList<Integer>();
if(listNode==null) return ans;
ListNode p=listNode;
while(p!=null){
ans.add(p.val);
p=p.next;
}
Collections.reverse(ans);
return ans;
}
}
运行时间: 23 ms
占用内存: 9252K
②利用函数的递归
import java.util.ArrayList;
public class Solution {
ArrayList<Integer> ans=new ArrayList<Integer>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if(listNode!=null){
printListFromTailToHead(listNode.next);
ans.add(listNode.val);
}
return ans;
}
}
运行时间:19 ms
占用内存:9312K
③利用栈结构“后进先出”实现
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> ans=new ArrayList<Integer>();
Stack<Integer> temp=new Stack<Integer>();
while(listNode!=null){
temp.push(listNode.val);
listNode=listNode.next;
}
while(!temp.isEmpty()){
ans.add(temp.pop());
}
return ans;
}
}
运行时间: 14 ms
占用内存: 9432K