剑指Offer题解

从尾到头打印链表

2018-07-06  本文已影响15人  lvlvforever

输入一个链表,按链表值从尾到头的顺序返回一个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);
    }
上一篇 下一篇

猜你喜欢

热点阅读