Queue using Two Stacks
Hacker Rank Problem
Solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | import java.util.Scanner; import java.util.Stack; public class Solution { public static void main(String[] args) { MyQueue<Integer> queue = new MyQueue<Integer>(); Scanner scan = new Scanner(System.in); int n = scan.nextInt(); for (int i = 0; i < n; i++) { int operation = scan.nextInt(); if (operation == 1) { // enqueue queue.enqueue(scan.nextInt()); } else if (operation == 2) { // dequeue queue.dequeue(); } else if (operation == 3) { // print/peek System.out.println(queue.peek()); } } scan.close(); } public static class MyQueue<Integer> { private Stack<Integer> stack1 = new Stack(); private Stack<Integer> stack2 = new Stack(); public void enqueue(Integer num) { stack1.push(num); } public Integer dequeue() { if (size() == 0) { return null; } if (stack2.isEmpty()) { shiftStacks(); } return stack2.pop(); } public Integer peek() { if (size() == 0) { return null; } if (stack2.isEmpty()) { shiftStacks(); } return stack2.peek(); } private void shiftStacks() { if (stack2.isEmpty()) { while ( ! stack1.isEmpty()) { stack2.push(stack1.pop()); } } } public int size() { return stack1.size() + stack2.size(); } } } |
Comments
Post a Comment