方案一:先逆序,再存放
import java.util.ArrayList;
public class Solution {
public ArrayList printListFromTailToHead(ListNode listNode) {
ListNode temp=null;
ListNode pre=null;
ListNode cur=listNode;
while(cur!=null){
temp=cur.next;
cur.next=pre;
pre=cur;
cur=temp;
}
ArrayList list=new ArrayList();
while(pre!=null){
list.add(pre.val);
pre=pre.next;
}
return list;
}
}
方案二采用栈
import java.util.*;
import java.util.ArrayList;
public class Solution {
public ArrayList printListFromTailToHead(ListNode listNode) {
Stack stack = new Stack();
ListNode temp=listNode;
while(temp!=null){
stack.push(temp.val);
temp=temp.next;
}
ArrayList list= new ArrayList();
while(!stack.isEmpty())
list.add(stack.pop());
return list;
}
}
方案三:采用递归的思想
import java.util.*;
import java.util.ArrayList;
public class Solution {
ArrayList list=new ArrayList();
public ArrayList printListFromTailToHead(ListNode listNode) {
f(listNode);
return list;
}
public void f(ListNode node){
if(node==null)
return;
f(node.next);
list.add(node.val);
}
}
结果对比:
方案 时间 内存
方案一 20ms 9348
方案二 22ms 9464
方案三 21ms 9344
结果对比好像差不多:递归的方案更加简洁