341. Flatten Nested List Iterator

本文深入探讨了如何使用栈结构解决341.FlattenNestedListIterator问题,详细讲解了通过反向入栈和拆解NestedList的方法,实现迭代器的next和hasNext功能,确保能正确处理包括[[]]在内的各种测试案例。

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;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值