430. 扁平化多级双向链表
多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。
给你位于列表第一级的头节点,请你扁平化列表,使所有结点出现在单级双链表中。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/flatten-a-multilevel-doubly-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
Node* flatten(Node* head) {
if(head == nullptr){ //头结点为空 ,返回空
return nullptr;
}
Node* res = head; //记录头结点,结果返回头结点
while(head->next!=nullptr && head->child == nullptr){
head = head->next; //深坑 顺序遍历,到达第一个有孩子节点的位置(也可能到达末尾)
}
if(head->child == nullptr){ // 直接返回结果
return res;
}
Node* pre = flatten(head->child); //对孩子节点继续遍历,获取子节点的重连结果
Node* next = head->next; //记录下一个节点
head->next = pre; //重连
pre->prev = head;
head->child = nullptr; //孩子节点置空
while(head->next != nullptr){ //重连接序列末尾和已保存next连接,
head = head->next;
}
head->next = next;
if(next != nullptr)
next->prev = head;
return res;
}
};