{
"$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"
}