剑指offer第3题:
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
理解:
本题中的关键词是从尾到头,考察当遇到反向输出时是否可以想到使用堆栈特性来辅助输出。
现将所有节点都压入堆栈,然后再依次弹出,此时弹出的顺序就是从尾到头的顺序了。注意ArrayList中存放的是整型,而不是ListNode型,这点要注意,否则是错的。
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<>();
if(listNode == null){
return list; //如果第一个结点就是null,那么就直接把新建的list返回
}
//利用堆栈的特点
Stack<ListNode> stack = new Stack<>();
while(listNode != null){ //将所有的结点依次压入
stack.push(listNode);
listNode = listNode.next;
}
while(!stack.isEmpty()){ //全部压入之后现在开始依次弹出,弹出的内容存到list当中
list.add(stack.pop().val);
}
return list; //注意返回类型正确
}
}
知识点:
- 使用ArrayList<>()要有“import java.util.ArrayList;”;
- 使用Stack<>()要有“import java.util.Stack;”;
- 向ArrayList中添加元素,使用add()方法;
- 堆栈压入:xx.push(xxx);
- 堆栈弹出:xx.pop();
- 堆栈为空:xx.isEmpty();