LeetCode 284. Peeking Iterator in F#
URL
leetcode.com/problems/peeking-iterator
Code
github.com/syohex/dotnet-study/blob/master/..
type Iterator =
{ mutable Nums: int list }
static member init(nums: int list) : Iterator = { Nums = nums }
member this.next() : int =
let ret = List.head this.Nums
this.Nums <- List.tail this.Nums
ret
member this.hasNext() : bool = List.isEmpty this.Nums
type PeekingIterator =
{ mutable Nums: Iterator
mutable peeked: bool
mutable value: int }
static member init(nums: int list) : PeekingIterator =
{ Nums = Iterator.init (nums)
peeked = false
value = -1 }
member this.peek() : int =
if not this.peeked then
this.peeked <- true
this.value <- this.Nums.next ()
this.value
else
this.value
member this.next() : int =
if this.peeked then
this.peeked <- false
this.value
else
this.Nums.next ()
member this.hasNext() : bool =
if this.peeked then
true
else
this.Nums.hasNext ()