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();
}
}
Related LeetCode Problems
Loading editor...