From cc5ab15011c8d113aa7ea7c39440110e9671866c Mon Sep 17 00:00:00 2001 From: ShusenTang Date: Wed, 11 Dec 2019 11:07:25 +0800 Subject: [PATCH] Create 341. Flatten Nested List Iterator.md --- .../341. Flatten Nested List Iterator.md | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 solutions/341. Flatten Nested List Iterator.md diff --git a/solutions/341. Flatten Nested List Iterator.md b/solutions/341. Flatten Nested List Iterator.md new file mode 100644 index 0000000..0e0349b --- /dev/null +++ b/solutions/341. Flatten Nested List Iterator.md @@ -0,0 +1,46 @@ +# [341. Flatten Nested List Iterator](https://leetcode.com/problems/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++ +``` C++ +class NestedIterator { +private: + int cur_index, size; + vectornums; + 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 &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; + } +}; +```