剑指Offer_07 用两个栈实现队列与 用两个队列实现栈

    用两个栈实现队列与 用两个队列实现栈。
    思路:1.两个栈实现队列。队列先进先出,可以使用栈1进数据,实现appendTail()方法。当队列出数据时,判断栈2是否为空,不为空,栈2.pop(),实现deletedHead()方法,为空则将栈1中数据pop后存入栈2中,实现deletedHead()方法。
        ![这里写图片描述](https://img-blog.csdn.net/20150728082302972?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
         2。两个队列实现栈。栈先进后出,可以使用队列1进数据(判断队列1,队列2哪个有数据,若队列1(2)有数据存入队列1(2),否则随意存入一个队列,实现pop()方法。当栈弹出数据时,把队列1的数据弹出,存入队列2中(当弹出数据后队列1为空,则该数据不存入队列2,只弹出队列1),此时队列2就是栈弹出数据后的结果。
         ![这里写图片描述](https://img-blog.csdn.net/20150728082509430?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
    代码:1.两个栈实现队列
/**  
     * 用两个栈实现一个队列,完成两个函数appendTail和deletedHead,分别是在队列尾部插入节点  
     * 和在队列头部删除节点的功能   
     */  
    private Stack<String> stack1 = new Stack<String>();  
    private Stack<String> stack2 = new Stack<String>();  

    public void appendTail(String s){  
        stack1.push(s);  
    }  
    public String deletedHead() throws Exception{  
        if(stack2.isEmpty()){  
            while(!stack1.isEmpty()){  
                stack2.push(stack1.pop());  
            }  
        }  
        if(stack2.isEmpty()){  
            throw new Exception("队列为空,不能删除");  
        }  
        return stack2.pop();  
    }  
    2.两个队列实现栈
     private LinkedList<String> queue1 = new LinkedList<String>();  
    private LinkedList<String> queue2 = new LinkedList<String>();  

    public String pop(){  
        String re =null;  
        if(queue1.size() == 0 && queue2.size() == 0){  
            return null;  
        }  
        if(queue2.size() == 0){  
            while(queue1.size() >0){  
                re = queue1.removeFirst();  
                if(queue1.size() != 0){  
                    queue2.addLast(re);  
                }  
            }  
        }else if(queue1.size() == 0){  
            while(queue2.size() >0){  
                re = queue2.removeFirst();  
                if(queue2.size()!=0){  
                    queue1.addLast(re);  
                }  
            }  
        }  
        return re;  
    }  
    public String push(String str){  
        if(queue1.size() ==0 && queue2.size() == 0){  
            queue1.addLast(str);  
        }else if(queue1.size()!=0){  
            queue1.addLast(str);  
        }else if(queue2.size()!=0){  
            queue2.addLast(str);  
        }  
        return str;  
    }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值