We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -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]
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof
这个题不难,但是有一个前提就是需要用两个栈实现队列,一般情况下,实现队列只需一个数组即可,可以实现先进先出。但是栈的特性我们都知道,是后进先出。 我们可以使用两个栈,一个in用来进栈,一个out用来出栈。 当我们push元素的时候直接添加到in的栈顶即可。 当我们pop元素的时候如果我们的out中还有元素,可以直接取栈顶的元素,否则out中没有元素了,我们可以获取in的栈顶元素push到out中,直到in中没有元素了。执行完之后out的栈顶元素就是in的栈底元素,最后把out的栈顶元素弹出即可。
in
out
package main import "fmt" type CQueue struct { pushStack []int popStack []int } func Constructor() CQueue { return CQueue{ pushStack: []int{}, popStack: []int{}, } } func (this *CQueue) AppendTail(value int) { this.pushStack = append(this.pushStack, value) } func (this *CQueue) DeleteHead() int { ret := -1 pushLen := len(this.pushStack) popLen := len(this.popStack) if pushLen == 0 && popLen == 0 { return ret } if popLen == 0 { for len(this.pushStack) > 0 { index := len(this.pushStack) - 1 value := this.pushStack[index] this.pushStack = this.pushStack[:index] this.popStack = append(this.popStack, value) } } popLen = len(this.popStack) ret = this.popStack[popLen-1] this.popStack = this.popStack[:popLen-1] return ret } func main() { obj := Constructor() obj.AppendTail(1) obj.AppendTail(2) obj.AppendTail(3) obj.AppendTail(4) fmt.Println(obj.DeleteHead()) fmt.Println(obj.DeleteHead()) obj.AppendTail(5) fmt.Println(obj.DeleteHead()) fmt.Println(obj.DeleteHead()) fmt.Println(obj.DeleteHead()) fmt.Println(obj.DeleteHead()) }
The text was updated successfully, but these errors were encountered:
No branches or pull requests
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
示例 1:
####示例 2:
提示:
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof
解答
这个题不难,但是有一个前提就是需要用两个栈实现队列,一般情况下,实现队列只需一个数组即可,可以实现先进先出。但是栈的特性我们都知道,是后进先出。
我们可以使用两个栈,一个
in
用来进栈,一个out
用来出栈。当我们push元素的时候直接添加到
in
的栈顶即可。当我们pop元素的时候如果我们的
out
中还有元素,可以直接取栈顶的元素,否则out
中没有元素了,我们可以获取in
的栈顶元素push到out
中,直到in
中没有元素了。执行完之后out
的栈顶元素就是in
的栈底元素,最后把out
的栈顶元素弹出即可。The text was updated successfully, but these errors were encountered: