思路:
- 将向量转为队列
- 迭代器的next交替取两个队列的队头,弹出
代码:
class ZigzagIterator {
private:
queue<int> d1, d2;
int cur = 0;
public:
//迭代器初始化
ZigzagIterator(vector<int>& v1, vector<int>& v2) {
for (auto i : v1) d1.push(i);
for (auto j : v2) d2.push(j);
cur = v1.empty() ? 1 : 0;
}
//迭代器next实现
int next() {
int val = 0;
//cur为0 取d1队头并弹出
if (cur == 0) {
val = d1.front(); d1.pop();
if (!d2.empty()) cur = 1;
}
//cur为1 取d2队头并弹出
else {
val = d2.front(); d2.pop();
if (!d1.empty()) cur = 0;
}
return val;
}
//迭代器结尾判断
bool hasNext() {
return !d1.empty() || !d2.empty();
}
};
该博客介绍了一种实现锯齿形迭代器的方法,通过维护两个队列d1和d2分别存储两个输入向量的数据。迭代器next()方法根据当前状态cur交替从两个队列中取出元素,并在队列为空时切换状态。博客详细阐述了迭代器的初始化、next操作和结束判断的逻辑,提供了一个清晰的代码实现。
5191

被折叠的 条评论
为什么被折叠?



