解题思路:需要将层级化结果转为扁平化;当前节点head,如果有child的化,需要遍历child,遍历child的过程就是一个递归的过程,递归时只需要将节点最后一个链表while(child->next) child = child->next和head->next进行相连即可(迭代方法:需要一个挨着一个进行遍历);如果没有child的化,只需要head = head->next即可;
递归
Node* flatten(Node* head) {
Node* res = new Node(0);
res->next = head;
while (head != NULL) {
if (head->child == NULL) {
head = head->next;
} else {
Node* temp = head->next;
Node* child_head = flatten(head->child);
//子节点和head进行相连接
head->next = child_head;
child_head->prev = head;
head->child = NULL;
while (head->next != NULL) {
head = head->next;
}
if (temp != NULL) {
head->next = temp;
}
if (temp != NULL) {
temp->prev = head;
}
head = temp;
}
}
return res->next;
}
迭代
Node* flatten(Node* head) {
Node* res = new Node(-1);
res->next = head;
while (head != NULL) {
if (head->child == NULL) {
head = head->next;
} else {
Node* temp = head->next;
Node* child_head = head->child;
head->child = NULL;
head->next = child_head;
child_head->prev = head;
while (child_head->next != NULL) {
child_head = child_head->next;
}
child_head->next = temp;
if (temp != NULL) {
temp->prev = child_head;
}
head = head->next;
}
}
return res->next;
}