剑指offer第三题
题目如下
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList
具体代码实现如下:
下面展示两种代码实现,思想都是基于递归,遍历到链表末尾,由低向上保存数据。
1.相互调用递归
import java.util.ArrayList;
public class Solution {
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
*}
*/
/**
* 输入一个链表,按链表值从尾到头到顺序返回一个ArrayList
* 解决办法:利用递归的思路,遍历到链表末尾,开始返回,用数组保存
* @param args
*/
public ArrayList<Integer> printListFromTailToHead(ListNode listNode){
ArrayList<Integer> arrayList = new ArrayList<Integer>();
if(listNode == null){
return arrayList;
}
printListFromTailToHead(listNode,arrayList);
return arrayList;
}
public void printListFromTailToHead(ListNode listNode,ArrayList<Integer> list){
if(listNode.next != null){
printListFromTailToHead(listNode.next,list);
}
list.add(listNode.val);
}
}
2.自身调用(相比而言,代码量更少一些,但占用空间稍大一点点)
public class Solution {
ArrayList list = new ArrayList();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode){
if(listNode != null){
printListFromTailToHead(listNode.next);
list.add(listNode.val);
}
return list;
}
}