LeetCode 284: Peeking Iterator

ArrayDesignIterator

Problem Description

Explanation

To implement a PeekingIterator class that supports the peek operation, we can store the current element in a variable and update it accordingly. When peek is called, we return the stored element without moving the iterator. We will also maintain a boolean flag to keep track of whether a peek has been performed or not.

Time Complexity

  • next: O(1)
  • peek: O(1)
  • hasNext: O(1)

Space Complexity

  • O(1)

Solutions

import java.util.Iterator;

class PeekingIterator implements Iterator<Integer> {
    private Iterator<Integer> iterator;
    private Integer nextElement;
    private boolean hasPeeked;

    public PeekingIterator(Iterator<Integer> iterator) {
        this.iterator = iterator;
        if (iterator.hasNext()) {
            nextElement = iterator.next();
            hasPeeked = false;
        }
    }

    public Integer peek() {
        if (!hasPeeked) {
            nextElement = iterator.next();
            hasPeeked = true;
        }
        return nextElement;
    }

    @Override
    public Integer next() {
        if (!hasPeeked) {
            return iterator.next();
        }
        Integer result = nextElement;
        hasPeeked = false;
        nextElement = null;
        return result;
    }

    @Override
    public boolean hasNext() {
        return hasPeeked || iterator.hasNext();
    }
}

Loading editor...