[leetcode] 341. Flatten Nested List Iterator
来源:互联网 发布:视频消音软件手机 编辑:程序博客网 时间:2024/05/29 05:10
Given a nested list of integers, implement an iterator to flatten it.
Each element is either an integer, or a list -- whose elements may also be integers or other lists.
Example 1:
Given the list [[1,1],2,[1,1]]
,
By calling next repeatedly until hasNext returns false, the order of elements returned by next should be: [1,1,2,1,1]
.
Example 2:
Given the list [1,[4,[6]]]
,
By calling next repeatedly until hasNext returns false, the order of elements returned by next should be: [1,4,6]
.
这道题是拉平层层嵌套的链表,题目难度为Medium。
这种嵌套的问题很自然想到要用栈来处理,由于要按照先后次序输出,所以要将链表从尾部开始依次进栈,然后判断栈顶元素是数字还是链表,如果是链表,将该链表出栈之后按同样的方法将它自身的元素从尾部开始进栈,直到栈顶元素是数字即可出栈输出了。这里将主要操作放在了hasNext()函数中,没有在next()函数中处理是为了避免空链表干扰hasNext()函数的判断。具体代码:
/** * // This is the interface that allows for creating nested lists. * // You should not implement it, or speculate about its implementation * class NestedInteger { * public: * // Return true if this NestedInteger holds a single integer, rather than a nested list. * bool isInteger() const; * * // Return the single integer that this NestedInteger holds, if it holds a single integer * // The result is undefined if this NestedInteger holds a nested list * int getInteger() const; * * // Return the nested list that this NestedInteger holds, if it holds a nested list * // The result is undefined if this NestedInteger holds a single integer * const vector<NestedInteger> &getList() const; * }; */class NestedIterator { stack<NestedInteger> stk;public: NestedIterator(vector<NestedInteger> &nestedList) { for(auto it=nestedList.rbegin(); it!=nestedList.rend(); ++it) { stk.push(*it); } } int next() { auto nstInt = stk.top(); stk.pop(); return nstInt.getInteger(); } bool hasNext() { while(!stk.empty() && !stk.top().isInteger()) { auto nstInt = stk.top(); stk.pop(); vector<NestedInteger> lst = nstInt.getList(); for(auto it=lst.rbegin(); it!=lst.rend(); ++it) stk.push(*it); } if(stk.empty()) return false; else return true; }};/** * Your NestedIterator object will be instantiated and called as such: * NestedIterator i(nestedList); * while (i.hasNext()) cout << i.next(); */
0 0
- leetcode 341. Flatten Nested List Iterator
- [leetcode] 341. Flatten Nested List Iterator
- LeetCode 341. Flatten Nested List Iterator
- LeetCode 341. Flatten Nested List Iterator
- [leetcode] 341. Flatten Nested List Iterator
- LeetCode: 341. Flatten Nested List Iterator
- Leetcode 341. Flatten Nested List Iterator
- 【LeetCode】 341. Flatten Nested List Iterator
- leetcode 341. Flatten Nested List Iterator
- LeetCode 341. Flatten Nested List Iterator
- [leetcode]341. Flatten Nested List Iterator
- leetcode 341. Flatten Nested List Iterator
- leetcode 341. Flatten Nested List Iterator
- leetcode 341. Flatten Nested List Iterator
- Leetcode 341. Flatten Nested List Iterator
- LeetCode|Flatten Nested List Iterator
- [LeetCode] Flatten Nested List Iterator
- LeetCode:Flatten Nested List Iterator
- Android中Java和JavaScript交互
- 51nod 1060 最复杂的数(反素数)
- HTML5canvas元素
- Animation
- java多线程问题(下)
- [leetcode] 341. Flatten Nested List Iterator
- 【Android】【网络编程】网络协议,HTTP,TCP,Socket,Get,Post
- Android官方开发文档Training系列课程中文版:调用相机之控制相机
- 布局模型
- python list排序
- 深入理解Lock
- LeetCode *** 55. Jump Game
- MongoDB数据库安装图解
- 多表连接查询