从尾到头打印链表

输入一个链表,按链表值从尾到头的顺序返回一个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);
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容