題目鏈結
多級雙向鍊錶中,除了指向下乙個節點和前乙個節點指標之外,它還有乙個子鍊錶指標,可能指向單獨的雙向鍊錶。這些子列表也可能會有乙個或多個自己的子項,依此類推,生成多級資料結構,如下面的示例所示。
給你位於列表第一級的頭節點,請你扁平化列表,使所有結點出現在單級雙鏈表中。
示例 1:
輸入:head =[1
,2,3
,4,5
,6,null,null,null,7,
8,9,
10,null,null,11,
12]輸出:[1,
2,3,
7,8,
11,12,
9,10,
4,5,
6]解釋:輸入的多級列表如下圖所示:
扁平化後的鍊錶如下圖:
示例 2:
輸入:head =[1
,2,null,3]
輸出:[1,
3,2]
解釋:輸入的多級列表如下圖所示:
1---
2---null
|3--
-null
示例 3:
輸入:head =
輸出:[
]
如何表示測試用例中的多級鍊錶?以 示例 1 為例:
1--
-2--
-3--
-4--
-5--
-6--null
|7---8-
--9-
--10-
-null
|11-
-12--null
序列化其中的每一級之後:
[1,
2,3,
4,5,
6,null][7
,8,9
,10,null][11
,12,null]
為了將每一級都序列化到一起,我們需要每一級中新增值為 null 的元素,以表示沒有節點連線到上一級的上級節點。
[1,
2,3,
4,5,
6,null]
[null,null,7,
8,9,
10,null]
[null,11,
12,null]
合併所有序列化結果,並去除末尾的 null 。
[1,
2,3,
4,5,
6,null,null,null,7,
8,9,
10,null,null,11,
12]
將多級鍊錶順時針旋轉90度,可以把它看成乙個二叉樹,發現,遍歷的方式正好是二叉樹的前序遍歷。
"""
# definition for a node.
class node(object):
def __init__(self, val, prev, next, child):
self.val = val
self.prev = prev
self.next = next
self.child = child
"""class
solution
(object):
defflatten
(self, head):if
not head:
return
pseudohead = node(0,
none
,head,
none
) prev = pseudohead
stack =
while stack:
curr = stack.pop(
) prev.
next
= curr
curr.prev = prev
if curr.
next
:next
)if curr.child:
# don't forget to remove all child pointers.
curr.child =
none
prev = curr
# detach the pseudo head node from the result.
pseudohead.
next
.prev =
none
return pseudohead.
next
"""
# definition for a node.
class node:
def __init__(self, val, prev, next, child):
self.val = val
self.prev = prev
self.next = next
self.child = child
"""class
solution
:def
flatten
(self, head:
'node')-
>
'node'
:#前序遍歷
ifnot head:
return head
stack =
cur = head
res =
while stack or cur:
while cur:
cur = cur.child
cur = stack.pop(
) cur = cur.
next
#利用前面得到的列表去生成單級雙向鍊錶
dummy = node(0)
pred = dummy
while res:
val = res.pop(0)
new = node(val)
new.prev = pred
pred.
next
= new
pred = new
pred.
next
=none
dummy.
next
.prev =
none
return dummy.
next
LeetCode 430 扁平化多級雙向鍊錶
您將獲得乙個雙向鍊錶,除了下乙個和前乙個指標之外,它還有乙個子指標,可能指向單獨的雙向鍊錶。這些子列表可能有乙個或多個自己的子項,依此類推,生成多級資料結構,如下面的示例所示。扁平化列表,使所有結點出現在單級雙鏈表中。您將獲得列表第一級的頭部。示例 輸入 1 2 3 4 5 6 null 7 8 9...
430 扁平化多級雙向鍊錶
題目 多級雙向鍊錶中,除了指向下乙個節點和前乙個節點指標之外,它還有乙個子鍊錶指標,可能指向單獨的雙向鍊錶。這些子列表也可能會有乙個或多個自己的子項,依此類推,生成多級資料結構,如下面的示例所示。給你位於列表第一級的頭節點,請你扁平化列表,使所有結點出現在單級雙鏈表中。示例 1 輸入 head 1,...
陣列扁平化
原陣列 const arr 1,2,3,4 5,6,7,8 9 希望輸出 1,2,3,4,5,6,7,8,9 方法一 遞迴 function arrdelayering arr else return newarr let newarr arrdelayering arr 1,2,3,4,5,6,7...