341. Flatten Nested List Iterator
思路:
提示可以用stack来解,那么问题在于在哪一步实现入栈并且拆list。
首先想要next就提取top,将每一个遇到的element 按反向顺序 入栈。再取出栈顶的时候如果是integer,可以直接输出,如果是nestedlist,继续拆开反向顺序 入栈。 那么剩下的hasNext 只要判断剩下站内是否还有元素就好了。但是[[]]这个test过不了。
class NestedIterator {
public:
NestedIterator(vector<NestedInteger> &nestedList) {
for (int i = nestedList.size() - 1; i >= 0; i--){
st.push(nestedList[i]);
}
}
int next() {
while (!st.empty()){
auto t = st.top();
st.pop();
if (t.isInteger()) {
int nx = t.getInteger();
return nx;
}
for (int i = t.getList().size() - 1; i >= 0; i--){
st.push(t.getList()[i]);
}
}
return {};
}
bool hasNext() {
return !st.empty();
}
private:
stack<NestedInteger> st;
};
也可以implement hasNext来做到剥开top,原理和上面一样,当剥完一层都反向入栈后, 看栈顶元素是否是integer,否则继续剥。其实也是判断栈内是否为空。如果不空
class NestedIterator {
public:
NestedIterator(vector<NestedInteger> &nestedList) {
for (int i = nestedList.size() - 1; i >= 0; i--){
st.push(nestedList[i]);
}
}
int next() {
NestedInteger t = st.top();
st.pop();
return t.getInteger();
}
bool hasNext() {
while (!st.empty()){
NestedInteger t = st.top();
if (t.isInteger())
return true;
else {
st.pop();
for (int i = t.getList().size() - 1; i >= 0; i--){
st.push(t.getList()[i]);
}
}
}
return false;
}
private:
stack<NestedInteger> st;
};