《剑指offer》题解汇总
https://blog.csdn.net/guliguliguliguli/article/details/126089434
本题链接
https://www.nowcoder.com/exam/oj/ta?difficulty=2&page=1&pageSize=50&search=&tpId=13&type=265
题目
思路
栈:后进先出
栈是一种仅支持在表尾进行插入和删除操作的线性表,这一端被称为栈顶,另一端被称为栈底。元素入栈指的是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;元素出栈指的是从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
队列:先进先出
队列是一种仅支持在表尾进行插入操作、在表头进行删除操作的线性表,插入端称为队尾,删除端称为队首,因整体类似排队的队伍而得名。它满足先进先出的性质,元素入队即将新元素加在队列的尾,元素出队即将队首元素取出,它后一个作为新的队首。·
用两个栈来模拟队列
队列的push操作:用stack1来添加数据即可
队列的pop操作:
-
检查stack2中是否有数据,有的话说明该数字是处在“队列”中靠前的位置,应该先弹出它
-
如果stack2为空,那么把stack1中的全部数据转移到stack2中,这样stack2中数据的弹出顺序与当初添加的顺序就一致了
-
弹出stack2中的栈顶元素
代码
import java.util.*;
import java.util.Stack;
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
stack1.push(node);
}
public int pop() {
if (!stack2.isEmpty()){
return stack2.pop();
}
while (!stack1.isEmpty()){
stack2.push(stack1.pop());
}
return stack2.pop();
}
}