题目描述:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
链表:
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
解题思路:
-
非递归方法
遍历链表,将链表值按顺序存入动态数组ArrayList,然后对ArrayList反响变换,返回所得的结果。
`//非递归方法
import java.util.ArrayList;
public class Solution {
public ArrayList printListFromTailToHead(ListNode listNode) {
ArrayList ar=new ArrayList();
ListNode temp=listNode;
//存放数据的反序列
ArrayList n=new ArrayList();
while(temp!=null){
n.add(temp.val);
temp=temp.next;
}
for(int i=n.size()-1;i>=0;i–){
ar.add((int)n.get(i));
}return ar;
}
}` -
递归方法
递归,将链表的值从尾到头压进ArrayList。
参考链接
import java.util.Stack;
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
Stack<Integer> stack = new Stack<>();
while (listNode != null) {
stack.push(listNode.val);
listNode = listNode.next;
}
ArrayList<Integer> list = new ArrayList<>();
while (!stack.isEmpty()) {
list.add(stack.pop());
}
return list;
}
}
总结:递归的代码更加简洁。