剑指offer07:用两个栈实现队列

来源:互联网 发布:php服务端开发 编辑:程序博客网 时间:2024/06/05 15:36

Java实现

用两个栈实现一个队列,实现对了的两个函数 appendTail 和 deleteHead,
分别完成在队列尾插入结点和在队列头部删除结点的功能。

具体操作过程如图所示:

这里写图片描述

将stack1中的元素依次弹出,并push进stack2中,此时,stack1为空, stack2为初始stack1的 倒序, 即原来stack1中栈底的元素 在 stack2的顶, 原来stack1中顶 在 stack2中为 底,此时完成顺序的转换。

只需依次,弹出stack2顶部的元素,直至stack2为空时候。

import java.util.*;public class Main<T> {    private Stack<T> stack1 = new Stack<T>();    private Stack<T> stack2 = new Stack<T>();    public void appendTail(T t){        stack1.push(t);    }    public T deleteHead(){        if(stack2.isEmpty()){            while (!stack1.isEmpty()){                stack2.push(stack1.pop());            }        }        if(stack2.isEmpty()){            try {                throw new Exception("队列为空");            } catch (Exception e) {                e.printStackTrace();            }        }        return stack2.pop();    }    public static void main(String[] args) {        Main<String> m = new Main<>();        m.appendTail("1");        m.appendTail("2");        m.appendTail("3");        String result = m.deleteHead();        System.out.println("被删除头节点: " + result);    }}
0 0
原创粉丝点击