思路一,建立一个LinkedList,将所有的元素都存下来,然后就好办了。空间复杂度为n
class PeekingIterator implements Iterator<Integer> {
private Iterator iterator;
private LinkedList<Integer> list;
public PeekingIterator(Iterator<Integer> iterator) {
list = new LinkedList<>();
this.iterator = iterator;
while(iterator.hasNext()){
list.add(iterator.next());
}
}
public Integer peek() {
// 返回next元素,但是不往下移动。在原地不动
// Iterator接口的next实际上,返回了下一个元素,并且往后移动了一个位置
return list.peek();
}
@Override
public Integer next() {
return list.pop();
}
@Override
public boolean hasNext() {
return !list.isEmpty();
}
}
思路二,空间复杂度为1,不建立队列了,我就用一个Integer来储存元素。
用integer是否为空,来判断指针的位置是否是在应该在的位置上,如果为空,说明指针的位置在对的位置上,如果不为空,说民指针超前了一个位置。
class PeekingIterator implements Iterator<Integer> {
private Iterator iterator;
private Integer integer;
public PeekingIterator(Iterator<Integer> iterator) {
this.iterator = iterator;
// 如果为空,就意味着,指针的位置是对的
// 不为空的话,意味着,指针的位置超前了一个位置
integer = null;
}
public Integer peek() {
// integer 储存了 peek的值。
if(integer == null){
integer = (Integer)iterator.next();
return integer;
}else{
return integer;
}
}
@Override
public Integer next() {
if(integer == null){
return (Integer)iterator.next();
}else{// integer 不为空,储存了peek的值
int tmp = integer;
integer = null;
return tmp;
}
}
@Override
public boolean hasNext() {
if(integer == null){
return iterator.hasNext();
}else{
// 说明指针超前了一个位置
return true;
}
}
}