Zigzag Iterator

NO IMAGE
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

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;
}
}

相關文章

程式語言 最新文章