430. Flatten a Multilevel Doubly Linked List LeetCode Solution
In this guide, you will get 430. Flatten a Multilevel Doubly Linked List LeetCode Solution with the best time and space complexity. The solution to Flatten a Multilevel Doubly Linked List problem is provided in various programming languages like C++, Java, and Python. This will be helpful for you if you are preparing for placements, hackathons, interviews, or practice purposes. The solutions provided here are very easy to follow and include detailed explanations.
Table of Contents
- Problem Statement
- Complexity Analysis
- Flatten a Multilevel Doubly Linked List solution in C++
- Flatten a Multilevel Doubly Linked List solution in Java
- Flatten a Multilevel Doubly Linked List solution in Python
- Additional Resources
Problem Statement of Flatten a Multilevel Doubly Linked List
You are given a doubly linked list, which contains nodes that have a next pointer, a previous pointer, and an additional child pointer. This child pointer may or may not point to a separate doubly linked list, also containing these special nodes. 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.
Given the head of the first level of the list, flatten the list so that all the nodes appear in a single-level, doubly linked list. Let curr be a node with a child list. The nodes in the child list should appear after curr and before curr.next in the flattened list.
Return the head of the flattened list. The nodes in the list must have all of their child pointers set to null.
Example 1:
Input: head = [1,2,3,4,5,6,null,null,null,7,8,9,10,null,null,11,12]
Output: [1,2,3,7,8,11,12,9,10,4,5,6]
Explanation: The multilevel linked list in the input is shown.
After flattening the multilevel linked list it becomes:
Example 2:
Input: head = [1,2,null,3]
Output: [1,3,2]
Explanation: The multilevel linked list in the input is shown.
After flattening the multilevel linked list it becomes:
Example 3:
Input: head = []
Output: []
Explanation: There could be empty list in the input.
Constraints:
The number of Nodes will not exceed 1000.
1 <= Node.val <= 105
How the multilevel linked list is represented in test cases:
We use the multilevel linked list from Example 1 above:
1—2—3—4—5—6–NULL
|
7—8—9—10–NULL
|
11–12–NULL
The serialization of each level is as follows:
[1,2,3,4,5,6,null]
[7,8,9,10,null]
[11,12,null]
To serialize all levels together, we will add nulls in each level to signify no node connects to the upper node of the previous level. The serialization becomes:
[1, 2, 3, 4, 5, 6, null]
|
[null, null, 7, 8, 9, 10, null]
|
[ null, 11, 12, null]
Merging the serialization of each level and removing trailing nulls we obtain:
[1,2,3,4,5,6,null,null,null,7,8,9,10,null,null,11,12]
Complexity Analysis
- Time Complexity: O(n)
- Space Complexity: O(n)
430. Flatten a Multilevel Doubly Linked List LeetCode Solution in C++
class Solution {
public:
Node* flatten(Node* head, Node* rest = nullptr) {
if (head == nullptr)
return rest;
head->next = flatten(head->child, flatten(head->next, rest));
if (head->next)
head->next->prev = head;
head->child = nullptr;
return head;
}
};
/* code provided by PROGIEZ */
430. Flatten a Multilevel Doubly Linked List LeetCode Solution in Java
class Solution {
public Node flatten(Node head) {
return flatten(head, null);
}
private Node flatten(Node head, Node rest) {
if (head == null)
return rest;
head.next = flatten(head.child, flatten(head.next, rest));
if (head.next != null)
head.next.prev = head;
head.child = null;
return head;
}
}
// code provided by PROGIEZ
430. Flatten a Multilevel Doubly Linked List LeetCode Solution in Python
class Solution:
def flatten(self, head: 'Node') -> 'Node':
def flatten(head: 'Node', rest: 'Node') -> 'Node':
if not head:
return rest
head.next = flatten(head.child, flatten(head.next, rest))
if head.next:
head.next.prev = head
head.child = None
return head
return flatten(head, None)
# code by PROGIEZ
Additional Resources
- Explore all LeetCode problem solutions at Progiez here
- Explore all problems on LeetCode website here
Happy Coding! Keep following PROGIEZ for more updates and solutions.