/*
// 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) {
        dfs(head);
        return head;
    }
    // 采用深度优先算法
    public Node dfs(Node node){
        // 当前节点
        Node cur = node;
        // 当前节点的上个节点
        Node last = null;

        while(cur != null){
            // 当前节点的下个节点
            Node next = cur.next;
            // 如果当前的子列表不为空
            if(cur.child != null){
                // 递归
                Node childLast = dfs(cur.child);
                cur.next = cur.child;
                cur.child.prev = cur;
                if(next != null){
                    childLast.next = next;
                    next.prev = childLast;
                }
                // 将当前节点的子列表置为空
                cur.child = null;
                last = childLast;
            }else{
                last = cur;
            } 
            cur = next;
        }
        return last;
    }
}