输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
链表节点定义:
/**
* public class ListNode {
* int val;
* ListNode next = null;
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
链表访问是从头到尾访问的,而要从尾到头的访问链表,明显是一个后进先出的数据结构,也就是“栈”,因此我们可以使用一个栈,对链表从头到尾访问,进栈,在出栈。考虑到栈和递归的紧密关系,我们可以使用递归来实现程序,注意在链表过长时可能会栈溢出。
代码仅供参考
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<>();
if(listNode == null){
return list;
}
recurVisitList(listNode,list);
return list;
}
private void recurVisitList(ListNode node,ArrayList<Integer> list){
if(node == null){
return;
}
recurVisitList(node.next,list);
list.add(node.val);
}
网友评论