• 剑指offer:从尾到头打印链表


    题目

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

    解题思路

    在不改变链表结构的前提下,因为单向链表本身的结构是从头到尾的,现在用从尾到头遍历打印,可以联想到“先进后出”,

    因此我们可以用栈保存链表节点,然后在输出栈即可。

    根据这个思路又可以联想到递归本质上就是一个栈结构,于是又可以用递归来实现,我们要输出一个节点,先输出其后面的结点。

    代码

    思路一:栈实现

     1     public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
     2         ArrayList<Integer> arrayList = new ArrayList<>();
     3         Stack<ListNode> stack = new Stack<>();
     4         while(listNode != null){
     5             stack.push(listNode);
     6             listNode = listNode.next;
     7         }
     8         while(!stack.empty()){
     9             arrayList.add(stack.pop().val);
    10         }
    11         return arrayList;
    12     }

    思路二:递归实现

    1     ArrayList<Integer> arrayList = new ArrayList<>();
    2     public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
    3         if(listNode!=null){
    4             printListFromTailToHead(listNode.next);
    5             arrayList.add(listNode.val);
    6         }
    7         return arrayList;
    8     }
  • 相关阅读:
    第九章 引用
    第八章 指针
    第六章 面向对象
    第五章 if语句与运算符
    第四章 C++数据类型
    第三章 初步了解函数
    第二章 做一个简短的C++程序
    第一章 初始C++
    vs2012 快捷键+方法
    vue如何修改生效日期范围,以及转化成yyyy-mm-dd的格式
  • 原文地址:https://www.cnblogs.com/huanglf714/p/11068259.html
Copyright © 2020-2023  润新知