题目描述
题目链接:leetcode-cn.com/problems/pe…
思路分析
在该题中需要实现一个迭代器的类,而在创建该迭代器时回传进一个以实现的迭代器,我们只需要新添加peek函数的功能即可,对此有两种实现的思路。
第一种,我们可以先将传进的迭代器的数据用数组储存起来,然后再记录索引,这样在实现peek函数时,只需要将当前下一个值直接传回就好
第二种,我们可以存储该传入的迭代器,后续实现时调用该迭代器的方法即可,为了实现peek函数,可以记录下该迭代器的下一位值,然后在使用时直接返回即可。
对于该传入的迭代器可以这么理解,它本身并没有值,有的是一个指针指向一个值,在调用next函数时就会返回该迭代器指向的值,然后指向下一个数,而hasNext函数是看当前迭代器是否有指向一个值
代码
-
思路1
/**
* @param {Iterator} iterator
*/
var PeekingIterator = function (iterator) {
this.arr = [];
this.index = 0;
while(iterator.hasNext()) {
this.arr.push(iterator.next());
}
};
/**
* @return {number}
*/
PeekingIterator.prototype.peek = function () {
return this.arr[this.index];
};
/**
* @return {number}
*/
PeekingIterator.prototype.next = function () {
return this.arr[this.index++];
};
/**
* @return {boolean}
*/
PeekingIterator.prototype.hasNext = function () {
return this.arr.length > this.index;
};
-
思路2
/**
* @param {Iterator} iterator
*/
var PeekingIterator = function (iterator) {
this.mIterator = iterator;
this.mmIterator = this.mIterator.next();
};
/**
* @return {number}
*/
PeekingIterator.prototype.peek = function () {
return this.mmIterator;
};
/**
* @return {number}
*/
PeekingIterator.prototype.next = function () {
let t = this.mmIterator;
this.mmIterator = this.mIterator.hasNext() ? this.mIterator.next() : null;
return t;
};
/**
* @return {boolean}
*/
PeekingIterator.prototype.hasNext = function () {
return (typeof this.mmIterator) == 'number';
};