剑指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 }
两种方法均通过牛客网。