力扣430. 扁平化多级双向链表

533 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

430. 扁平化多级双向链表

多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。

给你位于列表第一级的头节点,请你扁平化列表,使所有结点出现在单级双链表中。

截屏2021-09-24 下午9.08.58.png

思路分析

请你扁平化列表,使所有结点出现在单级双链表中。但看这一句可以理解为仅仅需要将所有的点都遍历一遍即可,但是由于题目中没有给出明确的遍历方式,因此我们选择尽量从题目给的例子中得到答案。

题目给的遍历方式看起来是child“方向”优先的深度优先遍历,因此我们有

Node tmp = node; //对于一个节点node
// 记录next
// 先看看有没有child
// 再看看有没有next

// 再重复上述过程
Node tmp = node; //对于一个节点node
//记录next
next = tmp - > next;
//先看有没有child
if(tmp->child != null){
    tmp->next = dfs(tmp -> child)
    c = tmp->next;
    c -> pre = tmp;
    tmp = c;
    
}

//再看有没有next

if(next != null){
    tmp->next = next;
    tmp->next->pre = tmp;
    tmp = tmp -> next;
}
//

重复上述过程只需要加一个while循环即可。