从尾到头打印链表 - Java
题目描述:
输入一个链表,从尾到头打印链表每个节点的值。
基本思路:
- 通常,不允许改变链表原有结构
1)后进先出 --> 栈
2)递归:本质上就是栈结构;但,链表很长时,函数调用层级很深,容易导致函数调用栈溢出
3)牛客上返回ArrayList,所以使用两个AL,新旧复制
总结:
stack用法:
- push(Object obj):压入栈
- pop():弹出栈顶元素,删除
- peek():取出栈顶元素,但不删除
- empty():判断是否为空
代码:
1)ArrayList - 牛客
//ArrayList - 牛客
public static ArrayList<Integer> printListFromTailToHead(ListNode listNode){
ArrayList al = new ArrayList();
ArrayList alNew = new ArrayList();
if(listNode == null)
return al;
while(listNode != null){
al.add(listNode.val);
listNode = listNode.next;
}
int length = al.size();
for(int i=length-1; i>=0; i--){
alNew.add(al.get(i));
}
return alNew;
}
2)堆版:
public static Stack<Integer> printReverse(ListNode listNode){
Stack<Integer> stack = new Stack<Integer>();
while(listNode != null){
stack.push(listNode.val);
listNode=listNode.next;
}
return stack;
}
3)递归版: