| 12345678910111213141516171819202122232425262728293031323334353637383940414243 | /*// Definition for a Node.class Node {    public int val;    public Node prev;    public Node next;    public Node child;    public Node() {}    public Node(int _val,Node _prev,Node _next,Node _child) {        val = _val;        prev = _prev;        next = _next;        child = _child;    }};*/class Solution {    public Node flatten(Node head) {        recurse(head);        return head;    }    private Node recurse(Node node) {        Node prev = node;        while (node != null) {            if (node.child == null) {                prev = node;                node = node.next;            } else {                prev = recurse(node.child);                prev.next = node.next; // Double linked list, both next and prev should be modified!                if (prev.next != null) prev.next.prev = prev;                node.next = node.child;                node.child.prev = node;                node.child = null;                node = prev.next;            }        }        return prev; // Return the last node of flatten list.    }}
 |