Leetcode 284 Solution

This article provides solution to leetcode question 284 (peeking-iterator)

https://leetcode.com/problems/peeking-iterator

Solution

// Below is the interface for Iterator, which is already defined for you. // **DO NOT** modify the interface for Iterator. class Iterator { struct Data; Data* data; public: Iterator(const vector<int>& nums); Iterator(const Iterator& iter); virtual ~Iterator(); // Returns the next element in the iteration. int next(); // Returns true if the iteration has more elements. bool hasNext() const; };
class PeekingIterator : public Iterator { int m_next; bool m_peeked;
public: PeekingIterator(const vector<int>& nums) : Iterator(nums) { // Initialize any member here. // **DO NOT** save a copy of nums and manipulate it directly. // You should only use the Iterator interface methods. m_peeked = false; }
// Returns the next element in the iteration without advancing the iterator. int peek() { if (m_peeked) return m_next; else { m_next = Iterator::next(); m_peeked = true; return m_next; } }
// hasNext() and next() should behave the same as in the Iterator interface. // Override them if needed. int next() { if (m_peeked) { m_peeked = false; return m_next; } else { return Iterator::next(); } }
bool hasNext() const { if (m_peeked) { return true; } else { return Iterator::hasNext(); } } };