整数のネストされたリストを提供します。この整数リスト内のすべての整数をトラバースできるようにイテレータを設計してください。
リスト内の各項目は、整数または別のリストのいずれかです。リストの要素は、整数または他のリストでもかまいません。
例1:
入力:[[1,1]、2、[1,1]]
出力:[1,1,2,1,1]
説明:hasNextがfalseを返すまでnextを繰り返し呼び出すことにより、nextによって返される要素の順序は次のようになります。 be:[1,1,2,1,1]。
例2:
入力:[1、[4、[6]]]
出力:[1,4,6]
説明:hasNextがfalseを返すまでnextを繰り返し呼び出すと、nextによって返される要素の順序は次のようになります:[1,4,6 ]。
代码:
接口类
public interface NestedInteger {
public boolean isInteger();
public Integer getInteger();
public List<NestedInteger> getList();
}
实现类
public class A implements NestedInteger {
private Integer aInteger;
private List<NestedInteger> list;
public A(Integer aInteger,List<NestedInteger> list) {
this.aInteger=aInteger;
this.list=list;
}
@Override
public boolean isInteger() {
if(aInteger!=null) {
return true;
}
return false;
}
@Override
public Integer getInteger() {
return aInteger;
}
@Override
public List<NestedInteger> getList() {
return list;
}
}
应用类
class NestedIterator implements Iterator<Integer> {
public static void main(String[] args) {
List<NestedInteger> a=new ArrayList<>();
List<NestedInteger> b=new ArrayList<>();
A a1=new A(1,null);
A a2=new A(2,null);
A a3=new A(3,null);
a.add(a2);
a.add(a3);
A a4=new A(null,a);
b.add(a1);
b.add(a4);
NestedIterator aa=new NestedIterator(b);
while(aa.hasNext()) {
System.out.println(aa.next());
}
}
Stack<NestedInteger> stack=new Stack<>();
public NestedIterator(List<NestedInteger> nestedList) {
for(int i=nestedList.size()-1;i>=0;i--) {
stack.add(nestedList.get(i));
}
}
@Override
public Integer next() {
return stack.pop().getInteger();
}
@Override
public boolean hasNext() {
while(!stack.isEmpty()) {
NestedInteger a=stack.peek();
if(a.isInteger()) {
return true;
}
List<NestedInteger> list=stack.pop().getList();
for(int i=list.size()-1;i>=0;i--) {
stack.add(list.get(i));
}
}
return false;
}
}