https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/
1. AppendTail,直接进s1,无需判断
2. DeleteHead,从s2出,但判断如下:
// 如果s2!=空,直接出s2
// 如果s2==空&&s1==空,返回-1
// 如果s2==空&&s1!=空,先将s1的全部元素进到s2,再从s2出
type CQueue struct {
S1 []int
S1TopIdx int
S2 []int
S2TopIdx int
}
func Constructor() CQueue {
return CQueue{
S1: make([]int, 1000),
S1TopIdx: -1,
S2: make([]int, 1000),
S2TopIdx: -1,
}
}
// 直接进s1
func (this *CQueue) AppendTail(value int) {
this.S1TopIdx++
this.S1[this.S1TopIdx] = value
}
// 出s2,判断如下:
// 如果s2!=nil,直接出s2
// 如果s2==nil&&s1==nil,返回-1
// 如果s2==nil&&s1!=nil,先从s1全部进到s2,再出s2
func (this *CQueue) DeleteHead() int {
if this.S2TopIdx != -1 {
this.S2TopIdx--
return this.S2[this.S2TopIdx+1]
}
if this.S1TopIdx == -1 {
return -1
}
for this.S1TopIdx > -1 {
this.S2TopIdx++
this.S2[this.S2TopIdx] = this.S1[this.S1TopIdx]
this.S1TopIdx--
}
this.S2TopIdx--
return this.S2[this.S2TopIdx+1]
}
/**
* Your CQueue object will be instantiated and called as such:
* obj := Constructor();
* obj.AppendTail(value);
* param_2 := obj.DeleteHead();
*/