mirror of
https://github.com/ShusenTang/LeetCode.git
synced 2024-09-02 14:20:01 +00:00
1.4 KiB
1.4 KiB
341. Flatten Nested List Iterator
思路
这道题让我们将嵌套链表压平。
思路很简单,因为链表的元素可能还是链表,所以是个递归(或者用栈转成非递归),我们先创建一个记录压平后所有元素的全局数组nums,
然后定义helper递归函数,传入一个NestedInteger
记为nest
:
- 若
nest.isInteger() == True
,即nest
是个数,将nest.getInteger()
push进nums即可; - 否则,即
nest
是个列表,那么对nest.getList()
的每个元素递归调用helper。
NestedIterator构造函数里面,我们对nestedList每个元素调用一下helper
以建立nums,建立好nums后,hasNext()
和next()
就好写了。
C++
class NestedIterator {
private:
int cur_index, size;
vector<int>nums;
void helper(NestedInteger &nest){
if(nest.isInteger())
nums.push_back(nest.getInteger());
else{
auto &list = nest.getList();
for(auto &a: list)
helper(a);
}
}
public:
NestedIterator(vector<NestedInteger> &nestedList) {
cur_index = 0;
for(auto & a: nestedList)
helper(a);
size = nums.size();
}
int next() {
return nums[cur_index++];
}
bool hasNext() {
return cur_index < size;
}
};