本文準(zhǔn)備講解1個(gè)算法編程問(wèn)題, 這個(gè)算法編程問(wèn)題來(lái)自LeetCode平臺(tái)。不了解.LeetCode平臺(tái)的讀者可以閱讀筆者文章(在線編程平臺(tái)推薦-LeetCode)。問(wèn)題的英文版本描述如下:
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].
問(wèn)題的中文版本描述:
處理鏈表
給定一個(gè)列表,該列表中的每個(gè)元素要么是個(gè)列表,要么是整數(shù)。將其變成一個(gè)只包含整數(shù)的簡(jiǎn)單列表。
注意事項(xiàng)
如果給定的列表中的元素本身也是一個(gè)列表,那么該元素也可以包含列表。
樣例
給定[1,2,[1,2]],返回[1,2,1,2]。
給定[4,[3,[2,[1]]]],返回[4,3,2,1]。
該問(wèn)題要求對(duì)復(fù)合結(jié)構(gòu)列表進(jìn)行處理, 列表的元素可能為整數(shù),也可能為整數(shù)。以目標(biāo)列表[1,2,[1,2]]為例,首個(gè)元素為整數(shù)1,第2個(gè)元素為整數(shù)2,后1個(gè)元素為列表 [1,2]。列表 [1,2] 又含有2個(gè)整數(shù)元素。核心的算法需要用到遞歸處理:以目標(biāo)列表 [4,[3,[2,[1]]]] 為例,簡(jiǎn)單說(shuō)明算法。首先處理目標(biāo)列表 [4,[3,[2,[1]]]],找出第1個(gè)整數(shù)元素并將該元素放入輸出列表。處理目標(biāo)列表 [4,[3,[2,[1]]]],找出第2個(gè)列表元素 [3,[2,[1]]] 。處理目標(biāo)列表 [3,[2,[1]]],找出第1個(gè)整數(shù)元素并將該元素放入輸出列表。處理目標(biāo)列表 [3,[2,[1]]],找出第2個(gè)列表元素 [2,[1]]。處理目標(biāo)列表 [2,[1]],找出第1個(gè)整數(shù)元素并將該元素放入輸出列表。處理目標(biāo)列表 [2,[1]],找出第2個(gè)列表元素 [1]。處理目標(biāo)列表 [1],找出第1個(gè)整數(shù)元素并將該元素放入輸出列表。
核心算法部分內(nèi)容見(jiàn)下圖: