{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreihcf5dkinolo6czls2cywz2v7mheczq5v6d2frax5rme7cm4ckt3a",
    "uri": "at://did:plc:25rdn5elo5izoxrmtis34zuk/app.bsky.feed.post/3mp22mdcat2j2"
  },
  "coverImage": {
    "$type": "blob",
    "ref": {
      "$link": "bafkreicxrrd5xmiox3jxexrnjjpwnlyowfgn5sx5635lrmumb4eobfn474"
    },
    "mimeType": "image/webp",
    "size": 51836
  },
  "path": "/jaspreet_singh_86ae1740ac/implement-queue-using-stacks-4epa",
  "publishedAt": "2026-06-24T13:16:11.000Z",
  "site": "https://dev.to",
  "tags": [
    "algorithms",
    "computerscience",
    "java",
    "leetcode",
    "leetcode.com"
  ],
  "textContent": "\nleetcode.com\n\n\n##  Problem Statement\n\nImplement a Queue using Stack operations only.\n\nSupport:\n\n\n\n    push()\n    pop()\n    peek()\n    empty()\n\n\n##  Brute Force Intuition\n\nUse one stack.\n\nFor dequeue:\n\n\n\n    Reverse stack\n    Remove front\n    Reverse again\n\n\nVery expensive.\n\n##  Moving Towards the Optimal Approach\n\nUse:\n\n\n\n    st1 → Incoming Elements\n\n    st2 → Outgoing Elements\n\n\nWhenever:\n\n\n\n    st2 becomes empty\n\n\nMove everything from:\n\n\n\n    st1 → st2\n\n\nThis reverses order automatically.\n\n##  Pattern Recognition\n\n\n    Queue\n    +\n    Stack\n\n    => Two Stack Reversal\n\n\n##  Key Observation\n\nInput:\n\n\n\n    1 2 3 4\n\n\nStored:\n\n\n\n    st1\n\n    4\n    3\n    2\n    1\n\n\nTransfer:\n\n\n\n    st2\n\n    1\n    2\n    3\n    4\n\n\nNow Queue order appears.\n\n##  Optimal Java Solution\n\n\n    class MyQueue {\n\n        Stack<Integer> st1;\n        Stack<Integer> st2;\n\n        public MyQueue() {\n\n            st1 = new Stack<>();\n            st2 = new Stack<>();\n        }\n\n        public void push(int x) {\n\n            st1.push(x);\n        }\n\n        private void transfer() {\n\n            if (st2.isEmpty()) {\n\n                while (!st1.isEmpty()) {\n\n                    st2.push(st1.pop());\n                }\n            }\n        }\n\n        public int pop() {\n\n            transfer();\n\n            return st2.pop();\n        }\n\n        public int peek() {\n\n            transfer();\n\n            return st2.peek();\n        }\n\n        public boolean empty() {\n\n            return st1.isEmpty()\n                && st2.isEmpty();\n        }\n    }\n\n\n##  Dry Run\n\n\n    push(1)\n\n    push(2)\n\n    push(3)\n\n\nStacks:\n\n\n\n    st1\n\n    3\n    2\n    1\n\n\nNeed dequeue.\n\nTransfer:\n\n\n\n    st2\n\n    1\n    2\n    3\n\n\nPop:\n\n\n\n    1 removed\n\n\nQueue order maintained.\n\n##  Complexity Analysis\n\nOperation | Complexity\n---|---\nPush | O(1)\nPop | Amortized O(1)\nPeek | Amortized O(1)\nEmpty | O(1)\n\n##  Interview One-Liner\n\n> Use one stack for insertion and another for removal. Transfer only when the output stack becomes empty.\n\n##  Pattern Learned\n\n\n    Stack Using Queue\n    → Rotation\n\n    Queue Using Stack\n    → Reversal\n\n    Stack Using Array\n    → Top Pointer\n\n    Queue Using Array\n    → Front/Rear Management\n",
  "title": "Implement Queue using Stacks"
}