LeetCode 232. Implement Queue using Stacks in F#
URL
Implement Queue using Stacks - LeetCode
Code
https://github.com/syohex/dotnet-study/tree/master/fsharp/leetcode/problems/0232/main.fsx
type MyQueue =
{ stack1: int list
stack2: int list }
static member empty() : MyQueue = { stack1 = []; stack2 = [] }
static member push (x: int) (q: MyQueue) : MyQueue = { q with stack1 = (x :: q.stack1) }
static member pop(q: MyQueue) : int * MyQueue =
let rec pop' stack1 stack2 =
match stack1 with
| [] -> [], stack2
| h :: t -> pop' t (h :: stack2)
let _, stack2' = pop' q.stack1 q.stack2
let ret = List.head stack2'
let stack2'', stack1'' = pop' (stack2' |> List.tail) []
ret, { stack1 = stack1''; stack2 = stack2'' }
static member peek(q: MyQueue) : int =
let rec peek' stack1 stack2 =
match stack1 with
| [] -> [], stack2
| h :: t -> peek' t (h :: stack2)
let _, stack2' = peek' q.stack1 q.stack2
List.head stack2'
static member isEmpty(q: MyQueue) : bool = List.isEmpty q.stack1