从尾到头打印链表
描述
输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。
如输入{1,2,3}的链表如下图:
返回一个数组为[3,2,1]
0 <= 链表长度 <= 10000
解法一 存入数组,然后翻转
数组翻转 Collections.reverse(arrayList);
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> result=new ArrayList<>();
if(listNode==null){
return result;
}
while(listNode!=null){
result.add(listNode.val);
listNode=listNode.next;
}
Collections.reverse(arrayList);
return result;
}
解法二 堆栈思路
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> result=new ArrayList<>();
if(listNode==null){
return result;
}
Stack<Integer> stack=new Stack();
while(listNode!=null){
stack.push(listNode.val);
listNode=listNode.next;
}
while(stack.size()!=0){
result.add((Integer)stack.pop());
}
return result;
}
}
解法三 递归版本
虽然逻辑简单,但是当链表长度较长时,导致函数调用深度过深引发栈溢出
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> result=new ArrayList<>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if(listNode!=null){
printListFromTailToHead(listNode.next);
result.add(listNode.val);
}
return result;
}
}