题解 | #【模板】栈#
【模板】栈
http://www.nowcoder.com/practice/104ce248c2f04cfb986b92d0548cccbf
思路:
使用 LinkedList 结构模拟 Stack 结构。
- 当需要进行 push 操作时,在 队尾 插入数据
- 当需要进行 pop 或者 top 操作时,先判断 队列是否为空。如果队列 为空,返回 error;如果队列 不为空,返回 队尾数据。
- 当然,可以使用 两个Queue 模拟 Stack。具体操作就是,插入 一个数据时,可以先将 队列1 中的所有元素转移到 队列2 中,然后往 队列1 中插入 新元素,最后,再将 队列2 中的元素转移回 队列1 中。但需要注意的是,此方法在 数据量大 的时候,会 超时。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = Integer.valueOf(scan.nextLine().trim());
ArrayList<String> ans = new ArrayList<>();
for (int i = 0; i < n; i++) {
String[] operators = scan.nextLine().split(" ");
if ("push".equals(operators[0])) {
push(operators[1]);
} else if ("pop".equals(operators[0])) {
ans.add(pop());
} else {
ans.add(top());
}
}
for (String str : ans) {
System.out.println(str);
}
}
public static LinkedList<String> ll = new LinkedList<>();
public static void push(String num) {
ll.add(num);
}
public static String pop() {
if (ll.isEmpty()) {
return "error";
} else {
String str = ll.peekLast();
ll.removeLast();
return str;
}
}
public static String top() {
return ll.isEmpty() ? "error" : String.valueOf(ll.peekLast());
}
}