LeetCode 232. Implement Queue using Stacks in F#

URL

https://leetcode.com/problems/implement-queue-using-stacks/description/

Code

https://github.com/syohex/dotnet-study/blob/master/fsharp/leetcode/challenge/202401/implement_queue_using_stacks/main.fsx

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