-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathPeekingIterator.java
More file actions
74 lines (63 loc) · 2.11 KB
/
PeekingIterator.java
File metadata and controls
74 lines (63 loc) · 2.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package Leetcode;
import java.util.Iterator;
/**
* @author kalpak
*
* Design an iterator that supports the peek operation on a list in addition to the hasNext and the next operations.
*
* Implement the PeekingIterator class:
*
* PeekingIterator(int[] nums) Initializes the object with the given integer array nums.
* int next() Returns the next element in the array and moves the pointer to the next element.
* bool hasNext() Returns true if there are still elements in the array.
* int peek() Returns the next element in the array without moving the pointer.
*
*
* 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
*
*
* Constraints:
*
* 1 <= nums.length <= 1000
* 1 <= nums[i] <= 1000
* All the calls to next and peek are valid.
* At most 1000 calls will be made to next, hasNext, and peek.
*
*/
public class PeekingIterator {
private Integer next;
private Iterator<Integer> itr;
public PeekingIterator(Iterator<Integer> iterator) {
// initialize any member here.
itr = iterator;
if(itr.hasNext())
next = itr.next();
}
// Returns the next element in the iteration without advancing the iterator.
public Integer peek() {
return next;
}
// hasNext() and next() should behave the same as in the Iterator interface.
// Override them if needed.
public Integer next() {
Integer result = next;
next = itr.hasNext() ? itr.next() : null;
return result;
}
public boolean hasNext() {
return next != null;
}
}