输入一个链表,按链表值从尾到头的顺序返回一个ArrayList
解题思路
看到题目时,第一个反应是用递归,当然暴力求解遍历链表逆向输出也是可行的,但是在遇到此类问题时会显得很麻烦,所以这里我们使用递归的方法。
定义全局链表ArrayList
将链表头节点传入
判断当前节点是否为尾节点的下一节点
如果是 就返回上一层调用函数 并记录上一届点链表值
如果不是 就将下一节点作为参数继续调用本函数
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
public class Solution {
//定义全局链表
ArrayList<Integer> arrayList=new ArrayList<Integer>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
//判断当前节点是否为空
if(listNode!=null){
//将下一节点作为参数进行递归
this.printListFromTailToHead(listNode.next);
//接收当前节点的链表值
arrayList.add(listNode.val);
}
//跳出当前函数 并将链表返回主调函数
return arrayList;
}
}
总结:当遇到这种从头到尾或者从尾到头及类似具有通性的问题时 应该建立起第一反应是用递归的思想,递归可以很好的解决具有通性的问题
知识点:
return
表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值,由return后面的参数指定