堆棧01--用兩個棧實作隊列-jz05
- 題目概述
- 解析&參考答案
- 注意事項
- 說明
題目概述
-
算法說明
用兩個棧來實作一個隊列,完成隊列的Push和Pop操作。 隊列中的元素為int類型。
-
測試用例
隊列先進先出,輸入: 1,2
輸出: 1,2
解析&參考答案
-
解析
golang 中預設沒有棧結構,是以此處直接使用兩個list來模拟一個隊列功能。
- 參考答案
vim jz25.go
package main
import "fmt"
var stack1 []int
var stack2 []int
func Push(node int) {
stack1 = append(stack1, node)
}
func Pop() int {
ret := 0
if len(stack2) == 0 {
for i := len(stack1) - 1; i >= 0; i-- {
stack2 = append(stack2, stack1[i])
}
stack1 = []int{}
ret = stack2[len(stack2)-1]
stack2 = stack2[:len(stack2)-1]
} else {
ret = stack2[len(stack2)-1]
stack2 = stack2[:len(stack2)-1]
}
return ret
}
func main() {
Push(1)
Push(2)
fmt.Println(Pop())
fmt.Println(Pop())
}
注意事項
- to add
說明
- 目前使用 go1.15.8
-
參考 牛客網--劍指offer
标題中jzn(n為具體數字)代表牛客網劍指offer系列第n号題目,例如 jz01 代表牛客網劍指offer中01号題目。
注意!!!
- 筆者最近在學習 golang,是以趁機通過資料結構和算法來進一步熟悉下go語言
- 目前算法主要來源于劍指 offer,後續會進一步補充 LeetCode 上重要算法,以及一些經典算法
- 此處答案僅為參考,不一定是最優解,歡迎感興趣的讀者在評論區提供更優解