Skip to content

Commit 19c28e7

Browse files
authored
Create Peeking Iterator.java
1 parent 95f798a commit 19c28e7

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

Medium/Peeking Iterator.java

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// Java Iterator interface reference:
2+
// https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html
3+
import java.util.NoSuchElementException;
4+
5+
class PeekingIterator implements Iterator<Integer> {
6+
7+
private Integer next;
8+
private Iterator<Integer> iter;
9+
private boolean noNextElement = false;
10+
11+
public PeekingIterator(Iterator<Integer> iterator) {
12+
// initialize any member here.
13+
iter = iterator;
14+
moveIterator();
15+
}
16+
17+
// Returns the next element in the iteration without advancing the iterator.
18+
public Integer peek() {
19+
return next;
20+
}
21+
22+
// hasNext() and next() should behave the same as in the Iterator interface.
23+
// Override them if needed.
24+
@Override
25+
public Integer next() {
26+
if (noNextElement) {
27+
throw new NoSuchElementException();
28+
}
29+
Integer val = next;
30+
moveIterator();
31+
return val;
32+
}
33+
34+
@Override
35+
public boolean hasNext() {
36+
return !noNextElement;
37+
}
38+
39+
public void moveIterator() {
40+
if (iter.hasNext()) {
41+
next = iter.next();
42+
}
43+
else {
44+
noNextElement = true;
45+
}
46+
}
47+
}

0 commit comments

Comments
 (0)