gg系列(剑指09) - 用两个栈实现队列

gg系列,偷懒三天,心酸。。
刷题进度:5/200

作者变优秀的小白

Github关注YX-XiaoBai

爱好Americano More Ice !

QQ学习交流群(new): 811792998

题目(难度:S)

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

示例 1:

输入:
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
输出:[null,null,3,-1]

示例 2:

输入:
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]
输出:[null,-1,null,null,5,2]

提示:

1 <= values <= 10000
最多会对 appendTail、deleteHead 进行 10000 次调用

Code

java 版本

class CQueue {
	// 创建两个链表
	LinkedList<Integer> A, B;
	public CQueue() {
		// 新建两个链表实现栈功能
		A = new LinkedList<Integer>();
		B = new LinkedList<Integer>();
	}
	public void appendTail(int value) {
		// 链表在尾部添加新元素
		A.addLast(value);
	}
	public int deleteHead() {
		// 如果B不为空,删除队尾
		if(!B.isEmpty()) return B.removeLast();
		// 如果A为空,返回-1
		if(A.isEmpty()) return -1;
		// 当A不为空
		while(!A.isEmpty())
			// A删除队尾元素,将A删除的元素加入B中
			B.addLast(A.removeLast());
		// 输出B最尾元素
		return B.removeLast();
	}
}
时间复杂度: O(n)
空间复杂度:  O(n)

结束语:大家如果遇到什么疑问或者建议的,可直接留言评论!作者看到会马上一一回复!

如果觉得小白此文章不错或对你有所帮助,期待ni的一键三连

上一篇:zabbix实现微信告警配置


下一篇:面试及总结3