Besides the common stack-based solutions, here is another recursive nestediterator solution:)
classNestediterator {intCurrinx; ConstVector<nestedinteger> &RData; Nestediterator*Sub; voidMove () {if(Currinx <0|| Rdata[currinx].isinteger () | | !sub->Hasnext ()) { if((++currinx) <rdata.size ()) {releasesub (); if(!Rdata[currinx].isinteger ()) { //Get next Non-empty list while(Currinx < Rdata.size () &&(Sub=NewNestediterator (const_cast<vector<nestedinteger>&>( rdata[currinx].getlist ())), (!rdata[currinx].isinteger () && Sub &&!sub->Hasnext ())) ) {Currinx++; Releasesub (); } } } } Else{Sub-move (); } } //nestediterator (): RData (Vector<NestedInteger> ()), Currinx (-1), sub (nullptr) {}voidreleasesub () {DeleteSub Sub =nullptr; } Public: ~Nestediterator () {releasesub (); } nestediterator (Vector<NestedInteger> &nestedlist): RData (Nestedlist), Currinx (-1), sub (nullptr) {move (); } intNext () {intval =0; if(Rdata[currinx].isinteger ()) {Val=Rdata[currinx].getinteger (); Move (); } Else{val= sub->next (); if(!sub->Hasnext ()) move (); } returnVal; } BOOLHasnext () {returnCurrinx < Rdata.size () && (Rdata[currinx].isinteger () | | sub->Hasnext ()); }};
Leetcode "Flatten Nested List Iterator"