Peeking Iterator LeetCode Solution

Last updated on July 18th, 2024 at 09:46 pm

Here, We see Peeking Iterator LeetCode Solution. This Leetcode problem is done in many programming languages like C++, Java, JavaScript, Python, etc. with different approaches.

List of all LeetCode Solution

Topics

Design

Companies

Apple, Google, Yahoo

Level of Question

Medium

Peeking Iterator LeetCode Solution

Peeking Iterator LeetCode Solution

Problem Statement

Design an iterator that supports the peek operation on an existing iterator in addition to the hasNext and the next operations.

Implement the PeekingIterator class:

  • PeekingIterator(Iterator<int> nums) Initializes the object with the given integer iterator iterator.
  • int next() Returns the next element in the array and moves the pointer to the next element.
  • boolean hasNext() Returns true if there are still elements in the array.
  • int peek() Returns the next element in the array without moving the pointer.

Note: Each language may have a different implementation of the constructor and Iterator, but they all support the int next() and boolean hasNext() functions.

Example 1:Input [“PeekingIterator”, “next”, “peek”, “next”, “next”, “hasNext”] [[[1, 2, 3]], [], [], [], [], []]
Output [null, 1, 2, 2, 3, false]

Explanation
PeekingIterator peekingIterator = new PeekingIterator([1, 2, 3]); // [1,2,3]
peekingIterator.next(); // return 1, the pointer moves to the next element [1,2,3].
peekingIterator.peek(); // return 2, the pointer does not move [1,2,3].
peekingIterator.next(); // return 2, the pointer moves to the next element [1,2,3]
peekingIterator.next(); // return 3, the pointer moves to the next element [1,2,3]
peekingIterator.hasNext(); // return False

1. Peeking Iterator LeetCode Solution C++

class PeekingIterator : public Iterator {
private:
    int m_next;
    bool m_hasnext;
public:
	PeekingIterator(const vector&lt;int&gt;&amp; nums) : Iterator(nums) {
	    m_hasnext = Iterator::hasNext();
	    if (m_hasnext) m_next = Iterator::next();
	}

	int peek() {
        return m_next;
	}

	int next() {
	    int t = m_next;
	    m_hasnext = Iterator::hasNext();
	    if (m_hasnext) m_next = Iterator::next();
	    return t;
	}

	bool hasNext() const {
	    return m_hasnext;
	}
};

2. Peeking Iterator LeetCode Solution Java

class PeekingIterator implements Iterator&lt;Integer&gt; {  
    private Integer next = null;
    private Iterator&lt;Integer&gt; iter;

    public PeekingIterator(Iterator&lt;Integer&gt; iterator) {
        iter = iterator;
        if (iter.hasNext())
            next = iter.next();
    }
    
    public Integer peek() {
        return next; 
    }

    public Integer next() {
        Integer res = next;
        next = iter.hasNext() ? iter.next() : null;
        return res; 
    }

    public boolean hasNext() {
        return next != null;
    }
}

3. Peeking Iterator Solution JavaScript

var PeekingIterator = function(iterator) {
    this.peeked = null;
    this.iterator = iterator;
};

PeekingIterator.prototype.peek = function() {
    if(this.peeked!==null){
        return this.peeked;
    }
    if(this.iterator.hasNext()!==false){
        this.peeked = this.iterator.next();
    }
    return this.peeked; 
};

PeekingIterator.prototype.next = function() {
    var val = "";
    if(this.peeked!==null){
        val = this.peeked;
        this.peeked = null;
        return val;
    }
    return this.iterator.next();
};

PeekingIterator.prototype.hasNext = function() {
    if(this.peeked!==null){
        return true;
    }
    return this.iterator.hasNext();
};

4. Peeking Iterator Solution Python

class PeekingIterator(object):
    def __init__(self, iterator):
        self.iter = iterator
        self.temp = self.iter.next() if self.iter.hasNext() else None

    def peek(self):
        return self.temp

    def next(self):
        ret = self.temp
        self.temp = self.iter.next() if self.iter.hasNext() else None
        return ret

    def hasNext(self):
        return self.temp is not None
Scroll to Top