1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| class Solution { public Node flatten(Node head) { flattenAndReturnTail(head); return head; }
private Node flattenAndReturnTail(Node head) { Node curr = head, tail = head; while (curr != null) { tail = curr; if (curr.child != null) { Node next = curr.next; curr.next = curr.child; curr.child.prev = curr; Node childTail = flattenAndReturnTail(curr.child); curr.child = null; childTail.next = next; if (next != null) { next.prev = childTail; } curr = childTail; } else { curr = curr.next; } }
return tail; } }
|
注意此题是双向链表,需要同时处理前后指针。
References
430. Flatten a Multilevel Doubly Linked List
剑指 Offer II 028. 展平多级双向链表