我新建的个人博客,欢迎访问:hmilzy.github.io


232. 用栈实现队列

题目链接: 用栈实现队列

这道题思路:
若要进队列,直接进入栈即可。
若要出队列,可以将入栈的元素全部放入出栈,然后返回出栈的pop()。记住在这之前要判断出栈是否有元素,如果有的话,直接返回出栈的pop,而不需要把入栈元素全部放入出栈中。
查看peek同理。
是否为空则要看入栈和出栈是否都空。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
class MyQueue {

Stack<Integer> stackIn;
Stack<Integer> stackOut;

public MyQueue() {
stackIn = new Stack<>();
stackOut = new Stack<>();
}

public void push(int x) {
stackIn.push(x);
}

public int pop() {
if(!stackOut.isEmpty()) {
return stackOut.pop();
}else{
while(!stackIn.isEmpty()) {
stackOut.push(stackIn.pop());
}
return stackOut.pop();
}
}

public int peek() {
if(!stackOut.isEmpty()){
return stackOut.peek();
}else{
while(!stackIn.isEmpty()) {
stackOut.push(stackIn.pop());
}
return stackOut.peek();
}
}

public boolean empty() {
return stackIn.isEmpty() && stackOut.isEmpty();
}
}

/**
* Your MyQueue object will be instantiated and called as such:
* MyQueue obj = new MyQueue();
* obj.push(x);
* int param_2 = obj.pop();
* int param_3 = obj.peek();
* boolean param_4 = obj.empty();
*/

225. 用队列实现栈

题目链接: 用队列实现栈

用一个Queue实现,要入队列的时候,就把之前队列中的元素重新放回队列。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class MyStack {

Queue<Integer> queue;

public MyStack() {
queue = new LinkedList<>();
}

//每 offer 一个数(A)进来,都重新排列,把这个数(A)放到队列的队首
public void push(int x) {
queue.offer(x);
int size = queue.size();
//移动除了 A 的其它数
while (size-- > 1)
queue.offer(queue.poll());
}

public int pop() {
return queue.poll();
}

public int top() {
return queue.peek();
}

public boolean empty() {
return queue.isEmpty();
}
}

/**
* Your MyStack object will be instantiated and called as such:
* MyStack obj = new MyStack();
* obj.push(x);
* int param_2 = obj.pop();
* int param_3 = obj.top();
* boolean param_4 = obj.empty();
*/