分享
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
#### 【题目】
编写一个结构体,用两个栈实现队列,支持队列的基本操作(push、poll、peek)
#### 【难度】
★★☆☆
#### 【解答】
```go
package main
import (
"container/list"
"errors"
"fmt"
)
func main() {
q := NewQueue()
q.Push(1)
fmt.Println(q.Peek())
q.Push(2)
fmt.Println(q.Peek())
fmt.Println(q.Poll())
fmt.Println(q.Peek())
fmt.Println(q.Poll())
fmt.Println(q.Poll())
fmt.Println(q.Peek())
}
type TwoStackQueue struct {
stackPush *list.List
stackPop *list.List
}
func NewQueue() *TwoStackQueue {
queue := new(TwoStackQueue)
queue.stackPush = list.New().Init()
queue.stackPop = list.New().Init()
return queue
}
func (q *TwoStackQueue)pushToPop() {
if q.stackPop.Len() == 0 {
for q.stackPush.Len() != 0 {
q.stackPop.PushFront(q.stackPush.Front())
q.stackPush.Remove(q.stackPush.Front())
}
}
}
func (q *TwoStackQueue)Push(num int64) {
q.stackPush.PushFront(num)
q.pushToPop()
}
func (q *TwoStackQueue)Poll() (int64,error) {
if q.stackPop.Len() == 0 && q.stackPush.Len() == 0{
return -1,errors.New("Your queue is empty")
}
q.pushToPop()
num := q.stackPop.Front().Value.(*list.Element).Value.(int64)
q.stackPop.Remove(q.stackPop.Front())
return num,nil
}
func (q *TwoStackQueue)Peek() (int64,error) {
if q.stackPop.Len() == 0 && q.stackPush.Len() == 0{
return -1,errors.New("Your queue is empty")
}
q.pushToPop()
num := q.stackPop.Front().Value.(*list.Element).Value.(int64)
return num,nil
}
```
作者: xmge
博客地址:[http://xmge.top](http://xmge.top)
有疑问加站长微信联系(非本文作者))
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信2233 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传