剑指offer——从尾到头打印链表

字符串结束,开始链表。原题目链接为:从尾到头打印链表

题目描述:

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

 题目分析:

首先可以将链表的值正向存储到数组中,然后将数组倒着进行输出。

这种思想其实就和栈差不多,所以我们可以直接借用栈;首先将值入栈;结束之后再出栈,将出栈的值存入ArrayList集合中。此方法的实现代码如下:

 1 import java.util.ArrayList;
 2 import java.util.Stack;
 3 public class Solution {
 4     ArrayList<Integer> arrayList = new ArrayList<Integer>();
 5     Stack<Integer> stack = new Stack<Integer>();
 6     public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
 7         while(listNode != null){
 8             stack.push(listNode.val);
 9             listNode = listNode.next;
10         }
11        //出栈,然后加入list集合
12         while(!stack.isEmpty()){
13             arrayList.add(stack.pop());
14         }
15         return arrayList;
16     }
17 }

除了这种比较直观的方法,还可以采用递归;这样只需要使用集合就可以了;其执行的过程和栈相似,只是中间结果不进行存储。

实现代码如下:

 1 import java.util.ArrayList;
 2 public class Solution {
 3     ArrayList<Integer> arrayList = new ArrayList<Integer>();
 4     public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
 5         if(listNode != null){
 6             printListFromTailToHead(listNode.next);
 7             arrayList.add(listNode.val);
 8         }
 9         return arrayList;
10     }
11 }

两种方法均通过牛客网。

 

posted @ 2020-05-28 20:04  暮光乐鱼  阅读(99)  评论(0编辑  收藏  举报