剑指Offer第三题:从尾到头打印链表
问题描述
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。、
问题分析
- 题目要求需要一个链表,于是我们先构造一个链表先。
-
1 class ListNode { 2 int val; 3 ListNode next = null; 4 5 ListNode(int val) { 6 this.val = val; 7 } 8 }
- 返回一个ArrayList?ArrayList是什么??ArrayList简单的理解就是一个数组,可以操作的数组。
- 要求是从尾部到头部返回,大家都是知道的,链表是单向性,只能够由上一个节点访问下一个节点,不能由此节点访问上一个节点。如果每取一个节点都重新遍历一遍链表,那么开销十分的大。
算法分析
- 先遍历链表一遍,由一个足够大的一维int数组由前到后存储每一个节点的值val。
- 然后将int数组逆向输出到ArrayList,问题解决
源代码
1 public class Solution { 2 public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { 3 int number=0; 4 int []index=new int[1000]; 5 int i=0; 6 while(listNode!=null) { 7 index[i]=listNode.val; 8 listNode=listNode.next; 9 number++; 10 i++; 11 } 12 ArrayList<Integer> newNode = new ArrayList<>(); 13 for(int j=number-1;j>=0;j--) { 14 newNode.add(index[j]); 15 } 16 return newNode; 17 } 18 }
运行截图
ps:转载标明出处