430. 扁平化多级双向链表
生活随笔
收集整理的這篇文章主要介紹了
430. 扁平化多级双向链表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
430. 扁平化多級雙向鏈表
多級雙向鏈表中,除了指向下一個節點和前一個節點指針之外,它還有一個子鏈表指針,可能指向單獨的雙向鏈表。這些子列表也可能會有一個或多個自己的子項,依此類推,生成多級數據結構,如下面的示例所示。
給你位于列表第一級的頭節點,請你扁平化列表,使所有結點出現在單級雙鏈表中。
示例 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]
解釋:
輸入的多級列表如下圖所示:
扁平化后的鏈表如下圖:
提示:
- 節點數目不超過 1000
- 1 <= Node.val <= 10^5
解題思路
類似于樹的遍歷,當遇到子節點的時候,優先遞歸進入子鏈表,并且遞歸返回的是子鏈表的末尾節點,那么我們就可以將子鏈表連接到第一級鏈表內部
代碼
/* // Definition for a Node. class Node {public int val;public Node prev;public Node next;public Node child; }; */class Solution {public Node flatten(Node head) {dfsFlatten(head);return head;}public Node dfsFlatten(Node head) {Node pre=null;while(head!=null){if(head.child!=null){Node next=head.next;Node tail=dfsFlatten(head.child);head.next=head.child;head.child.prev=head;head.child=null;if(next!=null){tail.next=next;next.prev=tail;}pre=tail;head=next;}else {pre=head;head=head.next;}}return pre;} }總結
以上是生活随笔為你收集整理的430. 扁平化多级双向链表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到男人生小孩是什么意思
- 下一篇: 做梦梦到被猫咬住不放是什么意思