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.
- }
- }
|