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.
典型的stack,但是在什么情况下pop出元素要考虑清楚
public class NestedIterator implements Iterator<Integer> { Stack<NestedInteger> stack = new Stack<NestedInteger>(); public NestedIterator(List<NestedInteger> nestedList) { if (nestedList != null) { for (int i = nestedList.size()-1; i>= 0; i--) { stack.push(nestedList.get(i)); } } } @Override public Integer next() { return stack.pop().getInteger(); } @Override public boolean hasNext() { while (!stack.isEmpty()) { if (!stack.peek().isInteger()) { pushFronBackToFront(stack, stack.pop()); } else { return true; } } return false; } private void pushFronBackToFront(Stack<NestedInteger> stack, NestedInteger val) { if (val.isInteger()) { stack.push(val); } else { for (int i = val.getList().size()-1; i>= 0; i--) { stack.push(val.getList().get(i)); } } } }