66 lines
1.6 KiB
Python
66 lines
1.6 KiB
Python
# Below is the interface for Iterator, which is already defined for you.
|
|
#
|
|
# class Iterator:
|
|
# def __init__(self, nums):
|
|
# """
|
|
# Initializes an iterator object to the beginning of a list.
|
|
# :type nums: List[int]
|
|
# """
|
|
#
|
|
# def hasNext(self):
|
|
# """
|
|
# Returns true if the iteration has more elements.
|
|
# :rtype: bool
|
|
# """
|
|
#
|
|
# def next(self):
|
|
# """
|
|
# Returns the next element in the iteration.
|
|
# :rtype: int
|
|
# """
|
|
|
|
class PeekingIterator:
|
|
peeked = None
|
|
|
|
def __init__(self, iterator):
|
|
"""
|
|
Initialize your data structure here.
|
|
:type iterator: Iterator
|
|
"""
|
|
self.it = iterator
|
|
|
|
def peek(self):
|
|
"""
|
|
Returns the next element in the iteration without advancing the iterator.
|
|
:rtype: int
|
|
"""
|
|
if self.peeked:
|
|
return self.peeked
|
|
|
|
self.peeked = self.it.next()
|
|
return self.peeked
|
|
|
|
def next(self):
|
|
"""
|
|
:rtype: int
|
|
"""
|
|
if self.peeked:
|
|
tmp, self.peeked = self.peeked, None
|
|
return tmp
|
|
|
|
return self.it.next()
|
|
|
|
|
|
def hasNext(self):
|
|
"""
|
|
:rtype: bool
|
|
"""
|
|
return self.peeked is not None or self.it.hasNext()
|
|
|
|
|
|
# Your PeekingIterator object will be instantiated and called as such:
|
|
# iter = PeekingIterator(Iterator(nums))
|
|
# while iter.hasNext():
|
|
# val = iter.peek() # Get the next element but not advance the iterator.
|
|
# iter.next() # Should return the same value as [val].
|