Given a nested list of integers, implement an iterator to flatten it.
Each element is either an integer, or a list -- whose elements may also be integers or other lists.
Example 1:
Given the list [[1,1],2,[1,1]]
,
By calling next repeatedly until hasNext returns false, the order of elements returned by next should be: [1,1,2,1,1]
.
Example 2:
Given the list [1,[4,[6]]]
,
By calling next repeatedly until hasNext returns false, the order of elements returned by next should be: [1,4,6]
.
嵌套的容器,设计一个迭代器,以便顺序访问里面的元素。
一个个判断逻辑有些混乱,直接递归全部取出来,塞入ArrayList,返回ArrayList的迭代器就好了。
public class NestedIterator implements Iterator<Integer>
{
ArrayList<Integer> arraylist;
Iterator<Integer> it;
public NestedIterator(List<NestedInteger> nestedList)
{
arraylist=new ArrayList<>();
getval(nestedList);
it=arraylist.iterator();
}
@Override
public Integer next()
{
return it.next();
}
@Override
public boolean hasNext()
{
return it.hasNext();
}
public void getval(List<NestedInteger> nestedList)
{
for(NestedInteger nestinteger : nestedList)
if(nestinteger.isInteger())
arraylist.add(nestinteger.getInteger());
else {
getval(nestinteger.getList());
}
}
}