一、题目
————————————————
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。
————————————————
二、思路
————————————————
这道题较简单,自己先试着模拟一下插入删除的过程(在草稿纸上动手画一下):插入肯定是往一个栈stack1中一直插入;删除时,直接出栈无法实现队列的先进先出规则,这时需要将元素从stack1出栈,压到另一个栈stack2中,然后再从stack2中出栈就OK了。需要稍微注意的是:当stack2中还有元素,stack1中的元素不能压进来;当stack2中没元素时,stack1中的所有元素都必须压入stack2中。否则顺序就会被打乱。
————————————————
三、解决问题
————————————————
测试用例
1.往空队列添加删除元素
2.往非空队列添加删除元素
3.删除至队列为空
————————————————
package swordoffer; /** * @author LQ * @version 1.0 * @date 2020-03-13 17:09 */ import java.util.Stack; /** * 用两个栈实现一个队列。队列的声明如下 * 请实现它的两个函数appendTail和deleteHead * 分别完成在队列尾部插入结点和在队列头部删除结点的功能。 */ public class Solution08 { public static void main(String[] args) { System.out.println("=============================="); Solution08 sword = new Solution08(); sword.test1(); System.out.println("=============================="); sword.test2(); System.out.println("=============================="); } Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); /** * 插入结点 * @param node */ public void push(int node) { stack1.push(node); } /** * 删除结点 * @return */ public int pop() { if(stack2.empty()){ if (stack1.empty()){ throw new RuntimeException("队列为空"); }else{ while(!stack1.empty()){ stack2.push(stack1.pop()); } } } return stack2.pop(); } //=======测试代码========== public void test1() { push(1); push(2); System.out.println(pop());//1 push(3); System.out.println(pop());//2 System.out.println(pop());//3 } /** * 往空队列删除元素 */ public void test2() { System.out.println(pop()); } }
————————————————
努力也是需要学习的,别再让你的努力,只感动了自己!愿你的每一次努力,都能为自己和别人创造价值。