題目描述:
多級雙向鍊錶中,除了指向下乙個節點和前乙個節點指標之外,它還有乙個子鍊錶指標,可能指向單獨的雙向鍊錶。這些子列表也可能會有乙個或多個自己的子項,依此類推,生成多級資料結構,如下面的示例所示。
給你位於列表第一級的頭節點,請你扁平化列表,使所有結點出現在單級雙鏈表中。
示例 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]
解釋:輸入的多級列表如下圖所示:
扁平化後的鍊錶如下圖:
借用乙個vector空間,裡面存放搜尋到的節點
遍歷鍊錶
child不為空,先搜尋child分支上的節點
遍歷完成返回,將vector中節點鏈結起來
child節點搜尋完之後,一定要置為空。
**:
class
solution
dfs(head-
>next)
;//搜尋下乙個節點
} node*
flatten
(node* head)
return vn[0]
;//返回}}
;
借用輔助棧,遍歷鍊錶
如child不為空,將該節點入棧,然後遍歷child節點分支
child分支為空,鏈結鍊錶
具體鏈結細節都在**裡了
**:
class
solution
if(p-
>next ==
nullptr
&&!st.
empty()
) tmp-
>next = tmp-
>child;
//改變父節點next指向
p = tmp;
//重新改變p的位置,將p指向父節點的位置
tmp-
>child =
nullptr
;//把child節點置為空
st.pop();
} p = p-
>next;
}return head;}}
;
扁平化多級雙向鍊錶
您將獲得乙個雙向鍊錶,除了下乙個和前乙個指標之外,它還有乙個子指標,可能指向單獨的雙向鍊錶。這些子列表可能有乙個或多個自己的子項,依此類推,生成多級資料結構,如下面的示例所示。扁平化列表,使所有結點出現在單級雙鏈表中。您將獲得列表第一級的頭部。示例 輸入 1 2 3 4 5 6 null 7 8 9...
430 扁平化多級雙向鍊錶
題目 多級雙向鍊錶中,除了指向下乙個節點和前乙個節點指標之外,它還有乙個子鍊錶指標,可能指向單獨的雙向鍊錶。這些子列表也可能會有乙個或多個自己的子項,依此類推,生成多級資料結構,如下面的示例所示。給你位於列表第一級的頭節點,請你扁平化列表,使所有結點出現在單級雙鏈表中。示例 1 輸入 head 1,...
LeetCode 430 扁平化多級雙向鍊錶
您將獲得乙個雙向鍊錶,除了下乙個和前乙個指標之外,它還有乙個子指標,可能指向單獨的雙向鍊錶。這些子列表可能有乙個或多個自己的子項,依此類推,生成多級資料結構,如下面的示例所示。扁平化列表,使所有結點出現在單級雙鏈表中。您將獲得列表第一級的頭部。示例 輸入 1 2 3 4 5 6 null 7 8 9...