天天看點

堆棧01--用兩個棧實作隊列題目概述解析&參考答案注意事項說明

堆棧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())
}
           

注意事項

  1. to add

說明

  1. 目前使用 go1.15.8
  2. 參考 牛客網--劍指offer

    标題中jzn(n為具體數字)代表牛客網劍指offer系列第n号題目,例如 jz01 代表牛客網劍指offer中01号題目。

注意!!!

  • 筆者最近在學習 golang,是以趁機通過資料結構和算法來進一步熟悉下go語言
  • 目前算法主要來源于劍指 offer,後續會進一步補充 LeetCode 上重要算法,以及一些經典算法
  • 此處答案僅為參考,不一定是最優解,歡迎感興趣的讀者在評論區提供更優解