题目
题目描述
输入一个链表,从尾到头打印链表每个节点的值。
ps:
注意本题并不是考察LinkedList的知识。
Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例
https://www.cnblogs.com/skywang12345/p/3308807.html
解法1:递归
思路
把链表的值倒序存储在动态数组ArraryList,但链表本身遍历本身是顺序的,考虑使用递归的思路,一层函数套一层,最里面那层反而是最先计算的,也就从链表的尾部开始计算。
这里要注意:ArrayList的初始化一定要放在函数外面,放在里面,是没法递归的,这里要将它看做成一个全局变量。
代码:
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
public class Solution {
ArrayList<Integer> alist=new ArrayList<Integer>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if(listNode!=null)
{
printListFromTailToHead(listNode.next);
alist.add(listNode.val);
}
return alist;
}
}
解法2:递归
思路
考虑到stack先进先出的特性,链表的头放进栈,出栈的时候尾部会先出来。
代码:
运行时间:12ms
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.Stack;
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> alist=new ArrayList<Integer>();
Stack<Integer> st=new Stack<Integer>();
while(listNode!=null)
{
st.push(new Integer(listNode.val));
listNode=listNode.next;
}
while(!st.isEmpty())
{
alist.add(st.pop());
}
return alist;
}
}