LeetCode 232. Implement Queue using Stacks in F#
URL
https://leetcode.com/problems/implement-queue-using-stacks/description/
Code
type MyQueue =
{ stack: int list }
static member init() : MyQueue = { stack = [] }
static member push (x: int) (q: MyQueue) : MyQueue = { stack = x :: q.stack }
static member pop(q: MyQueue) : (int * MyQueue) =
let rec pop' q tmp =
match q with
| [] -> failwith "never reach here"
| h :: [] -> h, { stack = List.rev tmp }
| h :: t -> pop' t (h :: tmp)
pop' q.stack []
static member peek(q: MyQueue) : int =
let rec peek' q tmp =
match q with
| [] -> failwith "never reach here"
| h :: [] -> h
| h :: t -> peek' t (h :: tmp)
peek' q.stack []
static member empty(q: MyQueue) : bool = List.isEmpty q.stack