本文准备讲解1个算法编程问题, 这个算法编程问题来自LeetCode平台。不了解.LeetCode平台的读者可以阅读笔者文章(在线编程平台推荐-LeetCode)。问题的英文版本描述如下:
Flatten Nested List Iterator
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 has Next returns false, the order of elements returned by next should be:[1,4,6].
问题的中文版本描述:
处理链表
给定一个列表,该列表中的每个元素要么是个列表,要么是整数。将其变成一个只包含整数的简单列表。
注意事项
如果给定的列表中的元素本身也是一个列表,那么该元素也可以包含列表。
样例
给定[1,2,[1,2]],返回[1,2,1,2]。
给定[4,[3,[2,[1]]]],返回[4,3,2,1]。
该问题要求对复合结构列表进行处理, 列表的元素可能为整数,也可能为整数。以目标列表[1,2,[1,2]]为例,首个元素为整数1,第2个元素为整数2,后1个元素为列表 [1,2]。列表 [1,2] 又含有2个整数元素。核心的算法需要用到递归处理:以目标列表 [4,[3,[2,[1]]]] 为例,简单说明算法。首先处理目标列表 [4,[3,[2,[1]]]],找出第1个整数元素并将该元素放入输出列表。处理目标列表 [4,[3,[2,[1]]]],找出第2个列表元素 [3,[2,[1]]] 。处理目标列表 [3,[2,[1]]],找出第1个整数元素并将该元素放入输出列表。处理目标列表 [3,[2,[1]]],找出第2个列表元素 [2,[1]]。处理目标列表 [2,[1]],找出第1个整数元素并将该元素放入输出列表。处理目标列表 [2,[1]],找出第2个列表元素 [1]。处理目标列表 [1],找出第1个整数元素并将该元素放入输出列表。
核心算法部分内容见下图: