LeetCode-Problems / 0284. Peeking Iterator / 0284. Peeking Iterator.py
0284. Peeking Iterator.py
Raw
# 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:
#     def __init__(self, iterator):
#         self._next = iterator.next()
#         self._iterator = iterator

#     def peek(self):
#         return self._next

#     def next(self):
#         if self._next is None:
#             raise StopIteration()
#         to_return = self._next
#         self._next = None
#         if self._iterator.hasNext():
#             self._next = self._iterator.next()
#         return to_return

#     def hasNext(self):
#         return self._next is not None



# import copy


# class PeekingIterator:
#     def __init__(self, iterator):
#         """
#         Initialize your data structure here.
#         :type iterator: Iterator
#         """
#         self.real_itr = iterator

#     def peek(self):
#         """
#         Returns the next element in the iteration without advancing the iterator.
#         :rtype: int
#         """
#         temp_itr = copy.deepcopy(self.real_itr)
#         peek_val = temp_itr.next() if temp_itr.hasNext() else None
#         return peek_val

#     def next(self):
#         """
#         :rtype: int
#         """
#         return self.real_itr.next() if self.real_itr.hasNext() else None

#     def hasNext(self):
#         """
#         :rtype: bool
#         """
#         return self.real_itr.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].