|
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