LeetCode 430. Flatten a Multilevel Doubly Linked List


原題鏈接在這里:https://leetcode.com/problems/flatten-a-multilevel-doubly-linked-list/description/

題目:

You are given a doubly linked list which in addition to the next and previous pointers, it could have a child pointer, which may or may not point to a separate doubly linked list. These child lists may have one or more children of their own, and so on, to produce a multilevel data structure, as shown in the example below.

Flatten the list so that all the nodes appear in a single-level, doubly linked list. You are given the head of the first level of the list.

Example:

Input:
 1---2---3---4---5---6--NULL
         |
         7---8---9---10--NULL
             |
             11--12--NULL

Output:
1-2-3-7-8-11-12-9-10-4-5-6-NULL

Explanation for the above example:

Given the following multilevel doubly linked list:

We should return the following flattened doubly linked list:

題解:

如果當前點cur 沒有child, 直接跳到cur.next 進行下次計算.

如果cur 有child, 目標是把cur.child這個level提到cur這個level上. 至於cur.child 這個level上有沒有點有child 先不管. 

做法就是cur.child 一直只按next找到tail, 然后這一節插在cur 和 cur.next之間, cur再跳到更新的cur.next上.

Time Complexity: O(n). n是所有點的個數, 每個點只走過constant次數.

Space: O(1).

AC Java:

 1 /*
 2 // Definition for a Node.
 3 class Node {
 4     public int val;
 5     public Node prev;
 6     public Node next;
 7     public Node child;
 8 
 9     public Node() {}
10 
11     public Node(int _val,Node _prev,Node _next,Node _child) {
12         val = _val;
13         prev = _prev;
14         next = _next;
15         child = _child;
16     }
17 };
18 */
19 class Solution {
20     public Node flatten(Node head) {
21         if(head == null){
22             return head;
23         }
24         
25         Node cur = head;
26         while(cur != null){
27             if(cur.child == null){
28                 cur = cur.next;
29                 continue;
30             }
31             
32             Node child = cur.child;
33             Node childTail = child;
34             while(childTail.next != null){
35                 childTail = childTail.next;
36             }
37             
38             cur.child = null;
39             child.prev = cur;
40             childTail.next = cur.next;
41             if(cur.next != null){
42                 cur.next.prev = childTail;
43             }
44             cur.next = child;
45             cur = cur.next;
46         }
47         
48         return head;
49     }
50 }

類似Flatten Binary Tree to Linked List.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM