LeetCode284.顶端迭代器
原题链接:顶端迭代器

1. 思路

采用一个临时变量缓存Iterator中next()的值
理解三个成员函数的含义:

peek(): 返回下一个元素的值,不向后移动一个元素
next(): 返回下一个元素的值,向后移动一个元素
hasNext(): 判断下一个元素是否存在,存在为true,不存在为false

定义PeekingIterator中的成员变量

int temp: 用于缓存Iterator中next()的值
int bean: 标记PeekingIterator是否存在下一个元素,可以直接获取Iterator的hasNext()方法赋值给bean

2. 难点:

如何使用Iterator类的方法实现PeekingIterator的方法。

如何缓存下一个元素,何时移动到下一个元素

next()需要考虑是否存在下一个元素

3. 代码注释

/*
 * Below is the interface for Iterator, which is already defined for you.
 * **DO NOT** modify the interface for Iterator.
 *
 *  class Iterator {
 *        struct Data;
 *         Data* data;
 *        Iterator(const vector<int>& nums);
 *         Iterator(const Iterator& iter);
 *
 *         // Returns the next element in the iteration.
 *        int next();
 *
 *        // Returns true if the iteration has more elements.
 *        bool hasNext() const;
 *    };
 */

class PeekingIterator : public Iterator {
public:
    PeekingIterator(const vector<int>& nums) : Iterator(nums) {
        // Initialize any member here.
        // **DO NOT** save a copy of nums and manipulate it directly.
        // You should only use the Iterator interface methods.
        if(Iterator::hasNext())  /*判断是否存在下一个元素*/
        {
            bean=1;              /*标记有下一个元素*/
            temp=Iterator::next();  /*缓存Iterator的下一个元素,并且向后移动第一个元素*/
        }else
        {
            bean=0;                  /*标记无下一个元素*/
        }
    }
    
    // Returns the next element in the iteration without advancing the iterator.
    int peek() {
       return temp;     
    }
    
    // hasNext() and next() should behave the same as in the Iterator interface.
    // Override them if needed.
    int next() {        
        int res_next=temp;      /*next()需要返回的数*/
    
        if(Iterator::hasNext()) /*判断是否存在下一个元素*/
            temp=Iterator::next();  
        else    
            bean=0;             /*标记无下一个元素*/
        return res_next;
    }
    bool hasNext() const {
      return bean;
    }
    private:
        int temp;
        int bean;
};

3. 总结反思

理解题意,弄清Iterator中的方法与PeekingIterator方法之间的联系。

看清楚题目!!!

看清楚题目!!!

看清楚题目!!!

说实话就是看题目花时间,实现起来还是挺简单的,代码也写得比较简洁。