我开始想错了。
正确解法应该是创建一个Stack<NestedInteger> stack把所有的元素都放进去,然后不断的pop()
- 如果是
Integer,就返回 - 如果是
NestedInteger,就再把这个的List给push()到stack中
代码如下:
/*** // This is the interface that allows for creating nested lists.* // You should not implement it, or speculate about its implementation* public interface NestedInteger {** // @return true if this NestedInteger holds a single integer, rather than a nested list.* public boolean isInteger();** // @return the single integer that this NestedInteger holds, if it holds a single integer* // Return null if this NestedInteger holds a nested list* public Integer getInteger();** // @return the nested list that this NestedInteger holds, if it holds a nested list* // Return null if this NestedInteger holds a single integer* public List<NestedInteger> getList();* }*/public class NestedIterator implements Iterator<Integer> {Stack<NestedInteger> stack = new Stack<>();public NestedIterator(List<NestedInteger> nestedList) {pushHelper(nestedList);}@Overridepublic Integer next() {return stack.pop().getInteger();}@Overridepublic boolean hasNext() {while (!stack.empty()) {NestedInteger tmp = stack.peek();if (tmp.isInteger()) {break;}else {stack.pop();pushHelper(tmp.getList());}}return !stack.empty();}private void pushHelper(List<NestedInteger> nestedList) {for (int i = nestedList.size() - 1; i >= 0; --i) {stack.push(nestedList.get(i));}}}/*** Your NestedIterator object will be instantiated and called as such:* NestedIterator i = new NestedIterator(nestedList);* while (i.hasNext()) v[f()] = i.next();*/
