Zigzag Iterator
题目链接:https://leetcode.com/problems...
这道题是说有两个list,来回返回两个list里面的值,要求用iterator来做。所以可以用两个iterator来分别存这两个list的值,再用一个int指针来表示现在应该取哪个list里面的值。
public class ZigzagIterator {
Iterator<Integer> l1, l2;
int point;
public ZigzagIterator(List<Integer> v1, List<Integer> v2) {
l1 = v1.iterator();
l2 = v2.iterator();
point = 0;
}
public int next() {
if(!hasNext()) return -1;
if(point == 0) {
point = 1;
return l1.next();
}
else {
point = 0;
return l2.next();
}
}
public boolean hasNext() {
if(!l1.hasNext() && point == 0) point = 1;
if(!l2.hasNext() && point == 1) point = 0;
return l1.hasNext() || l2.hasNext();
}
}
如果要扩展成k个list,那么可以用一个list<Interator>来存所有的list里面的值。还是需要一个指针,思路和两个的时候差不多。这里用list之后,如果一个iterator循环结束,可以直接把它移除,然后next()就可以直接判断list是否是空。
public class ZigzagIterator {
List<Iterator<Integer>> list;
int point;
public ZigzagIterator(List<Integer> v1, List<Integer> v2) {
list = new LinkedList();
if(v1 != null) list.add(v1.iterator());
if(v2 != null) list.add(v2.iterator());
point = 0;
}
public int next() {
int result = list.get(point).next();
point = (point + 1) % list.size();
return result;
}
public boolean hasNext() {
if(list.get(point).hasNext()) return true;
int i = point;
while(i < list.size()) {
if(!list.get(i).hasNext()) list.remove(i);
else return true;
}
while(list.size() > 0) {
if(!list.get(0).hasNext()) list.remove(0);
else {
point = 0;
return true;
}
}
return false;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。