美文网首页
剑指 offer 笔记 03 | 从尾到头打印链表

剑指 offer 笔记 03 | 从尾到头打印链表

作者: ProudLin | 来源:发表于2019-04-24 10:58 被阅读0次

    题目描述:输入一个链表,按链表值从尾到头的顺序返回一个 ArrayList。

    分析:
    这里的关键点,有从尾到头;从链表返回 list;

    「从尾到头」顺序打印,可以联想到一种数据结构,Stack是栈。它的特性是:先进后出(FILO, First In Last Out)。

    java 工具包中的 Stack 是继承于「Vector」(矢量队列)的,由于 Vector 是通过数组实现的,这就意味着,Stack也是通过数组实现的而非链表

    所以最佳思路是利用栈先入后出的特性完成(递归也是可以的)。

    步骤:
    1)先特殊判断,链表是否为空

    2)不为空,则取出链表的数据,存放到 stack 里面,且连接下一个节点

    3)创建一个 list

    4)判断 stack 是否为空

    5)stack 不为空,则取出 stack 的值,存入 list,并把 list 返回;

    代码:

    import java.util.ArrayList;
    import java.util.Stack;
    public class Solution {
        public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
            Stack<Integer> stack=new Stack<Integer>();
            while(listNode!=null){
                stack.push(listNode.val);
                listNode=listNode.next;     
            }
            
            ArrayList<Integer> list=new ArrayList<Integer>();
            while(!stack.isEmpty()){
                list.add(stack.pop());
            }
            return list;
        }
    }
    

    顺便附上牛客网大咖的递归代码:

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

    链接https://www.nowcoder.com/questionTerminal/d0267f7f55b3412ba93bd35cfa8e8035
    来源:牛客网

    总结:可以反馈学习 Stack 数据结构的特性,以及复习递归更层次的思想。

    相关文章

      网友评论

          本文标题:剑指 offer 笔记 03 | 从尾到头打印链表

          本文链接:https://www.haomeiwen.com/subject/rmdmgqtx.html