题目描述:
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
题目思路:
大概率面试官是不想我们打印一个链表还要改动链表,既然是反序输出,可以想到栈的特性,先进后出。所以开辟一个栈空间保存正序遍历链表输出的结点元素值,然后再输出栈元素。当然,利用栈会牺牲空间,总体时间复杂度为O(n)。
代码(Java实现):
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> arrayList = new ArrayList<Integer>();
//鲁棒性
if(listNode == null){
return arrayList;
}
//存储链表头结点
ListNode pNode = listNode;
//利用栈的先进后出存储链表结点值,以便后面输出
Stack<Integer> stack = new Stack<Integer>();
while(pNode != null){
stack.add(pNode.val);
pNode = pNode.next;
}
//存储栈元素
int elem = 0;
while(stack.size() > 0){
elem = stack.pop();
arrayList.add(elem);
}
return arrayList;
}
}