import scala.collection.mutable.ArrayDeque
def deleteMiddle[T](stack: ArrayDeque[T]): Unit = {
if (stack.isEmpty) return
val mid = stack.length / 2
deleteKth(stack, mid)
}
private def deleteKth[T](stack: ArrayDeque[T], k: Int): Unit = {
if (k == 0) {
stack.removeLast() // remove the middle element
return
}
val top = stack.removeLast()
deleteKth(stack, k - 1)
stack.append(top) // restore elements
}
@main def run(): Unit = {
val st = ArrayDeque(1, 2, 3, 4, 5, 6, 7)
deleteMiddle(st)
println(st)
}
/*
run:
ArrayDeque(1, 2, 3, 5, 6, 7)
*/