【剑指offer】用两个栈实现队列 -- JavaScript实现
用两个栈实现队列
http://www.nowcoder.com/questionTerminal/54275ddae22f475981afa2244dd448c6
举例说明
1 2 3进栈
stack1 = 1 2 3
stack2 = null
将stack1的数据转移到stack2,注意先进后出
stack1 = null
stack2 = 3 2 1
此时若 1 要出栈,直接stack2.pop即可。
stack1 = null
stack2 = 3 2
2 出栈
stack1 = null
stack2 = 3
5 6 进栈
stack1 = 5 6
stack2 = 3
此时若要出栈,则必须先出stack2中的元素。
结论:stack1 用来进栈,stack2 用来出栈。按先进后出的顺序将stack1中的元素放入到stack2中,放完一次后,必须先将stack2中的元素全部出栈,才能继续将stack1中的元素放到stack2中。
let stack1 = []; let stack2 = []; function push(node) { // stack1用来进栈 stack1.push(node); } function pop() { // stack2用来出栈 // 若stack2中有元素,则必须先将stack2中的元素出栈,才能再次存放stack1中的元素 if(stack2.length <= 0){ while(stack1.length != 0){ stack2.push(stack1.pop()); } } return stack2.pop() }