leetcode 每日一题 2021/10/05 284. 顶端迭代器

leetcode 每日一题 2021/10/5 284. 顶端迭代器

难度:中等

请你设计一个迭代器,除了支持 hasNext 和 next 操作外,还支持 peek 操作。

实现 PeekingIterator 类:

  1. PeekingIterator(int[] nums) 使用指定整数数组 nums 初始化迭代器。
  2. int next() 返回数组中的下一个元素,并将指针移动到下个元素处。
  3. bool hasNext() 如果数组中存在下一个元素,返回 true ;否则,返回 false 。
  4. int peek() 返回数组中的下一个元素,但 不 移动指针。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/peeking-iterator
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

分析:

  1. PeekingIterator初始化迭代器,即将指针指向初始位置, 数组长度是大于等于1的(提示信息中)。

  2. next(),即如果数组不为空第一次返回的是第1个数。假设数组中有2个数,最开始调用next() 返回arr[0],并且指针将会移动打next[1]处。

  3. hasNext()直接调用就行。

  4. peek()直接返回当前指针所指的值。

易错点:

​ 注意看题目的提示。

​ 第一次调用next()返回的是第一个元素,而不是第二个元素。

// * 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;

// public:

// Iterator(const vector& 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:

  int nextValue;//相当于是指向下一个的指针

  bool flag;//判断nextValue是否存在

  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.

​    //初始化迭代器:即指针指向初始位置,next是第一个元素

​     flag = Iterator::hasNext();

​    if(flag){

​      nextValue = Iterator::next();

​    }

  }

  

  // Returns the next element in the iteration without advancing the iterator.

  int peek() {

​    return nextValue;

  }

  

  // hasNext() and next() should behave the same as in the Iterator interface.

  // Override them if needed.

  int next() {

​    int tempValue = nextValue;

​    flag = Iterator::hasNext();

​    if(flag){

​      nextValue=Iterator::next();

​    }

​    return tempValue;

  }

  

  bool hasNext() const{

​    return flag;

  }

};


上一篇:刷题-力扣-284. 窥探迭代器


下一篇:GoLang设计模式09 - 迭代器模式