一、题目
多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。
给你位于列表第一级的头节点,请你扁平化列表,使所有结点出现在单级双链表中。
点击查看原题
难度级别: 中等
二、思路
1)DFS
优先遍历孩子链表,将next链表链接在孩子链表尾部
使用dfs函数,认为dfs函数会返回该链表的尾部节点,拿到尾部链表节点后,插入在当前遍历节点cur和cur.next中间即可
三、代码
1)DFS
class Solution {public Node flatten(Node head) {dfs(head);return head;}public Node dfs(Node head) {Node cur = head, last = head; // 当前遍历的节点cur,当前链表的尾节点lastwhile (cur != null) {if (cur.child != null) {Node childLast = dfs(cur.child); // 获取孩子节点的尾节点Node childHead = cur.child;cur.child = null;if (cur.next != null) { // 链接孩子尾部节点和cur.next节点childLast.next = cur.next;cur.next.prev = childLast;}cur.next = childHead; // 链接cur节点和孩子头节点childHead.prev = cur;cur = childLast;}last = cur;cur = cur.next;}return last;}}
时间复杂度为`O(n)`,假设最深孩子深度为`m`,空间复杂度为`O(m)`
