# 430. Flatten a Multilevel Doubly Linked List

**<font color=red>难度: Medium</font>**

## 刷题内容

> 原题连接

* https://leetcode.com/problems/flatten-a-multilevel-doubly-linked-list/

> 内容描述

```
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:
```

## 解题方案

> 思路 1
******- 时间复杂度: O(N)******- 空间复杂度: O(N)******

一看就知道用 stack，第一步一定是看有没有child，然后再看其他

beats 94.86%


```python
class Solution(object):
    def flatten(self, head):
        """
        :type head: Node
        :rtype: Node
        """
        stack = []
        node = head
        while node:
            if node.child:
                node.child.prev = node
                if node.next:
                    stack.append(node.next)
                node.next = node.child
                node.child = None
            else:
                if not node.next:
                    if stack:
                        tmp = stack.pop()
                        node.next = tmp
                        tmp.prev = node
                        node = node.next
                        continue
                    else:
                        return head
            node = node.next
```


































