题目链接:https://leetcode-cn.com/problems/peeking-iterator/description/
给定一个迭代器类的接口,接口包含两个方法: next()
和 hasNext()
。设计并实现一个支持 peek()
操作的顶端迭代器 -- 其本质就是把原本应由 next()
方法返回的元素 peek()
出来。
示例:
假设迭代器被初始化为列表[1,2,3]。
调用next()返回1,得到列表的第一个元素。
现在调用peek()返回2,下一个元素。在此之后调用next()仍然返回2。
最后一次调用next()返回3,末尾元素。在此之后调用hasNext()应该返回false。
进阶:你将如何拓展你的设计?使之变得通用化,从而适应所有的类型,而不只是整数型?
对于迭代器,我个人也不是特别理解。但是按照题目要求来做的话,用链表来做的话是很容易实现的,废话不多说,直接上代码!
PS:进阶我也不会啊。。
代码如下:
// Java Iterator interface reference:
// https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html
class PeekingIterator implements Iterator<Integer> {
List<Integer> list;
public PeekingIterator(Iterator<Integer> iterator) {
// initialize any member here.
list=new LinkedList<>();
while(iterator.hasNext()){
list.add(iterator.next());
}
}
// Returns the next element in the iteration without advancing the iterator.
public Integer peek() {
return list.get(0);
}
// hasNext() and next() should behave the same as in the Iterator interface.
// Override them if needed.
@Override
public Integer next() {
Integer temp=list.get(0);
list.remove(0);
return temp;
}
@Override
public boolean hasNext() {
if(list.size()==0){
return false;
}
else{
return true;
}
}
}