|
1 | 1 | package g0201_0300.s0225_implement_stack_using_queues
|
2 | 2 |
|
3 |
| -// #Easy #Stack #Design #Queue #2022_10_26_Time_248_ms_(73.44%)_Space_36.1_MB_(43.75%) |
| 3 | +// #Easy #Stack #Design #Queue #2024_08_17_Time_147_ms_(88.57%)_Space_35.9_MB_(87.62%) |
4 | 4 |
|
5 | 5 | import java.util.LinkedList
|
| 6 | +import java.util.Queue |
6 | 7 |
|
7 |
| -class MyStack { |
8 |
| - private var queuePair = Pair(LinkedList<Int>(), LinkedList<Int>()) |
9 |
| - private var top: Int? = null |
| 8 | +class MyStack() { |
| 9 | + private val queue1: Queue<Int> = LinkedList() |
| 10 | + private val queue2: Queue<Int> = LinkedList() |
10 | 11 |
|
11 | 12 | fun push(x: Int) {
|
12 |
| - queuePair.first.addLast(x) |
13 |
| - top = x |
| 13 | + queue1.add(x) |
14 | 14 | }
|
15 | 15 |
|
16 | 16 | fun pop(): Int {
|
17 |
| - if (isQueuesEmpty()) { |
18 |
| - throw Exception() |
| 17 | + while (queue1.size > 1) { |
| 18 | + queue2.add(queue1.remove()) |
19 | 19 | }
|
20 |
| - val queuePair = selectSourceAndDestinationQueues(queuePair) |
21 |
| - var value = 0 |
22 |
| - repeat(queuePair.first.size) { |
23 |
| - when (queuePair.first.size) { |
24 |
| - 2 -> { |
25 |
| - top = queuePair.first.removeFirst() |
26 |
| - queuePair.second.addLast(top) |
27 |
| - } |
28 |
| - 1 -> { |
29 |
| - value = queuePair.first.removeFirst() |
30 |
| - } |
31 |
| - else -> { |
32 |
| - queuePair.second.addLast(queuePair.first.removeFirst()) |
33 |
| - } |
34 |
| - } |
35 |
| - } |
36 |
| - return value |
| 20 | + val top = queue1.remove() |
| 21 | + queue1.clear() |
| 22 | + queue1.addAll(queue2) |
| 23 | + queue2.clear() |
| 24 | + return top |
37 | 25 | }
|
38 | 26 |
|
39 | 27 | fun top(): Int {
|
40 |
| - if (isQueuesEmpty()) { |
41 |
| - throw Exception() |
| 28 | + while (queue1.size > 1) { |
| 29 | + queue2.add(queue1.remove()) |
42 | 30 | }
|
43 |
| - return top!! |
| 31 | + val top = queue1.remove() |
| 32 | + queue2.add(top) |
| 33 | + queue1.clear() |
| 34 | + queue1.addAll(queue2) |
| 35 | + queue2.clear() |
| 36 | + return top |
44 | 37 | }
|
45 | 38 |
|
46 | 39 | fun empty(): Boolean {
|
47 |
| - return isQueuesEmpty() |
48 |
| - } |
49 |
| - |
50 |
| - private fun isQueuesEmpty(): Boolean { |
51 |
| - if (queuePair.first.isEmpty() && queuePair.second.isEmpty()) { |
52 |
| - return true |
53 |
| - } |
54 |
| - return false |
55 |
| - } |
56 |
| - |
57 |
| - private fun selectSourceAndDestinationQueues(queuePair: Pair<LinkedList<Int>, LinkedList<Int>>): |
58 |
| - Pair<LinkedList<Int>, LinkedList<Int>> { |
59 |
| - return if (queuePair.first.isNotEmpty()) { |
60 |
| - Pair(queuePair.first, queuePair.second) |
61 |
| - } else { |
62 |
| - Pair(queuePair.second, queuePair.first) |
63 |
| - } |
| 40 | + return queue1.isEmpty() |
64 | 41 | }
|
65 | 42 | }
|
66 | 43 |
|
|
0 commit comments