实现思路
栈是先入后出,队列是先入先出。根据这个思想,可以用一个栈作为入队,另一个栈作为出队。只要把第一个栈的栈顶的元素压入第二个栈就好了,出队的时候输出第二个栈的栈顶,如果第二个栈的空了就需要不断操作从第一个栈的栈顶压入第二个栈,但是如果第一个栈也空了,那就说明所有元素都输出来了。
代码
/**
* Created by maozonghong
* on 2020/9/3
*/
class StackQueue {
companion object{
//入队
var stack1= Stack<Int>()
//出队
var stack2=Stack<Int>()
fun push(node:Int){
//入队 保证出队为空
while(!stack2.isEmpty()){
stack1.push(stack2.peek())
stack2.pop()
}
stack1.push(node)
println("入队元素是:"+ stack1.peek())
}
fun pop(){
//出队 保证入队为空
while(!stack1.empty()){
stack2.push(stack1.peek())
stack1.pop()
}
println("出队元素:"+ stack2.peek())
stack2.pop()
}
@JvmStatic
fun main(args: Array<String>) {
push(1)
push(2)
push(3)
pop()
pop()
push(4)
pop()
push(5)
pop()
pop()
}
}
}
打印如下:
入队元素是:1
入队元素是:2
入队元素是:3
出队元素:1
出队元素:2
入队元素是:4
出队元素:3
入队元素是:5
出队元素:4
出队元素:5
网友评论