C++ | Leetcode C++题解之第430题扁平化多级双向链表
题目:
题解:
class Solution {
public:Node* flatten(Node* head) {function<Node*(Node*)> dfs = [&](Node* node) {Node* cur = node;// 记录链表的最后一个节点Node* last = nullptr;while (cur) {Node* next = cur->next;// 如果有子节点,那么首先处理子节点if (cur->child) {Node* child_last = dfs(cur->child);next = cur->next;// 将 node 与 child 相连cur->next = cur->child;cur->child->prev = cur;// 如果 next 不为空,就将 last 与 next 相连if (next) {child_last->next = next;next->prev = child_last;}// 将 child 置为空cur->child = nullptr;last = child_last;}else {last = cur;}cur = next;}return last;};dfs(head);return head;}
};