【剑指offer】输入一个链表,按链表值从尾到头的顺序返回一个ArrayList

剑指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;
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_42967016/article/details/84455177