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

题目解析:
方法一:class类
第一行输入数组是相关操作,第二行输入数组代表相应操作的参数
CQueue:创建一个名字为CQueue的数列,没有参数 -> []
deleteHead:删除队列头部整数,不需要参数 -> []
appendTail:增加队列尾部整数,需要参数 -> [3]



题目代码
class CQueue { input: number[] = []; output: number[] = []; appendTail(num: number): void { this.input.push(num); } deleteHead() { if (this.output.length != 0) { return <number>this.output.pop(); } else { while (this.input.length != 0) { this.output.push(<number>this.input.pop()); } return this.output.pop() || -1; } } } var obj = new CQueue(); // console.log(obj) obj.appendTail(3); // console.log(obj) var param_2 = obj.deleteHead(); console.log(param_2); console.log(obj.deleteHead()) // console.log(obj)
方法二:数组
var CQueue = function () { this.stack1 = []; // 入堆栈 this.stack2 = []; // 出堆栈 }; /** * @param {number} value * @return {void} */ //入栈时直接将元素push进数组 CQueue.prototype.appendTail = function (value) { this.stack1.push(value); }; /** * @return {number} */ CQueue.prototype.deleteHead = function () { //出栈时如果出栈不为空则将其第一个元素删掉并返回 if (this.stack2.length) { return this.stack2.shift(); //出栈时如果入栈为空则直接返回负一 } else if (!this.stack1.length) { return -1; } else { // 如果出栈为空而入栈不为空则依次将入栈中的第一个元素push进出栈中直到入栈为空然后再运行出栈函数deleteHead while (this.stack1.length) { this.stack2.push(this.stack1.shift()); } return this.deleteHead(); } }; var obj = new CQueue(); obj.appendTail(5); obj.appendTail(4); console.log(obj) var param_2 = obj.deleteHead();
题目来源:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/submissions/
https://leetcode-cn.com/study-plan/lcof/?progress=n517q27

浙公网安备 33010602011771号