0430. 扁平化多级双向链表

文章目录

题目链接

https://leetcode.cn/problems/flatten-a-multilevel-doubly-linked-list/

题目描述

将多级双向链表扁平化:把每个节点的 child 子链表插入到该节点与其 next 之间,最终得到单层双向链表,所有 child 置为 null。

推荐写法(返回尾节点,整体 O(n))

java 复制代码
/*
// Definition for a Node.
class Node {
    public int val;
    public Node prev;
    public Node next;
    public Node child;
}
*/
class Solution {
    public Node flatten(Node head) {
        flattenTail(head);
        return head;
    }

    // 扁平化以 head 为首的链表,返回该段扁平化后的尾节点
    private Node flattenTail(Node head) {
        Node cur = head;
        Node last = head; // 记录当前已扁平段的尾

        while (cur != null) {
            Node next = cur.next;
            if (cur.child != null) {
                // 先把 child 段扁平化,得到其尾节点 childTail
                Node childHead = cur.child;
                Node childTail = flattenTail(childHead);

                // 将 child 段插入 cur 与 next 之间
                cur.next = childHead;
                childHead.prev = cur;
                cur.child = null;

                // 接回 next
                if (next != null) {
                    childTail.next = next;
                    next.prev = childTail;
                }

                // 更新 last,并从 childTail 继续
                last = childTail;
                cur = next;
            } else {
                last = cur;
                cur = next;
            }
        }
        return last;
    }
}

复杂度分析

  • 时间复杂度:O(n),每个节点仅被访问和重连常数次。
  • 空间复杂度:O(d),d 为最大嵌套深度(递归栈);可改迭代+显式栈降为 O(h) 显式空间。
相关推荐
小星星闪亮登场1 小时前
Codeforces Round 1115 ( Div. 2)
数据结构·c++·算法·贪心算法·排序算法·codeforces
计算机小白一个1 小时前
蓝桥杯 Java B 组之哈希表应用(两数之和、重复元素判断)
java·数据结构·算法·蓝桥杯
Loge编程生活1 小时前
打卡信奥刷题(3449)用C++实现信奥题 P10429 [蓝桥杯 2024 省 B] 拔河
开发语言·数据结构·c++·算法·青少年编程
zander2589 小时前
4. 寻找两个正序数组的中位数:用分割点代替合并
数据结构·算法
敲上瘾9 小时前
redis常用数据类型与操作方法
数据结构·数据库·redis·缓存
牢姐与蒯10 小时前
c++高级数据结构之图(基本概念,存储结构,BFS,DFS,最小生成树)
数据结构·c++·
Tongzhi202610 小时前
考勤数据本地化存储:通芝科技无感考勤一体机的数据安全逻辑
大数据·数据结构·科技·均值算法·数据库开发·推荐算法
她说可以呀11 小时前
Spring-ai-Rag-多文件格式生成 List<Document>
数据结构·list
郝学胜_神的一滴12 小时前
干货版《算法导论》17:双数极值配对与卡牌手牌编码最优解
数据结构·算法
我不会插花弄玉13 小时前
10.list【由浅入深-C++】
数据结构·c++·list