Skip to content

Instantly share code, notes, and snippets.

@Sedose
Last active September 3, 2024 06:35
Show Gist options
  • Save Sedose/2268e2148fcb4609f8a2b855f89657d1 to your computer and use it in GitHub Desktop.
Save Sedose/2268e2148fcb4609f8a2b855f89657d1 to your computer and use it in GitHub Desktop.
Single queue using 2 stacks impl for Leetcode problem
package org.example
fun main() {
createQueue(createStack(), createStack()).apply {
push(1)
push(2)
push(3)
pop()
peek()
pop()
pop()
isNotEmpty()
}
}
fun createQueue(stack1: StackOperations, stack2: StackOperations): QueueOperations {
return object : QueueOperations {
override fun push(item: Int) {
stack1.push(item)
}
override fun pop(): Int {
shiftStacks()
return stack2.pop()
}
override fun peek(): Int {
shiftStacks()
return stack2.peek()
}
override fun isEmpty(): Boolean {
return stack1.isEmpty() && stack2.isEmpty()
}
override fun isNotEmpty(): Boolean {
return stack1.isNotEmpty() && stack2.isNotEmpty()
}
private fun shiftStacks() {
if (stack2.isEmpty()) {
while (stack1.isNotEmpty()) {
stack2.push(stack1.pop())
}
}
}
}
}
fun createStack(): StackOperations {
val elements = mutableListOf<Int>()
return object : StackOperations {
override fun push(item: Int) {
elements.add(item)
}
override fun pop(): Int {
return elements.removeLast()
}
override fun peek(): Int {
return elements.last()
}
override fun isEmpty(): Boolean {
return elements.isEmpty()
}
override fun isNotEmpty(): Boolean {
return elements.isNotEmpty()
}
}
}
interface QueueOperations {
fun push(item: Int)
fun pop(): Int
fun peek(): Int
fun isEmpty(): Boolean
fun isNotEmpty(): Boolean
}
interface StackOperations {
fun push(item: Int)
fun pop(): Int
fun peek(): Int
fun isEmpty(): Boolean
fun isNotEmpty(): Boolean
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment