从头到尾打印链表Java实现[剑指offer]

题目

输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
第一想法可能是将链表反转,但是根据题意,应当是不能改变链表的结构的。

1通过栈的思想实现

1.1描述

链表的节点越靠后,就越先打印,符合先进后出的思想,利用ArrayList类中add方法可以指定index,将当前节点放在链表的最前面即可

1.2code

 1 public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
 2         //1.通过栈的思想实现
 3         ArrayList<Integer> list=new ArrayList<Integer>();
 4         if(listNode!=null){
 5            while(listNode!=null){
 6                list.add(0,listNode.val);
 7                listNode=listNode.next;
 8            }
 9         }
10         return list;
11     }

2通过递归实现

2.1描述

递归的本质是一个栈结构,当访问到一个节点时,先不输出,先输出该节点的下一个节点,再输出自身

2.2code

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

 

posted on 2019-11-10 19:46  ERFishing  阅读(589)  评论(0编辑  收藏  举报