1. 程式人生 > >【Leetcode】 284. 頂端迭代器

【Leetcode】 284. 頂端迭代器

給定一個迭代器類的介面,介面包含兩個方法: 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;
        }
	}
}