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) 显式空间。
相关推荐
踩坑记录5 小时前
leetcode hot100 2.两数相加 链表 medium
leetcode·链表
历程里程碑8 小时前
滑动窗口---- 无重复字符的最长子串
java·数据结构·c++·python·算法·leetcode·django
派大鑫wink9 小时前
【Day61】Redis 深入:吃透数据结构、持久化(RDB/AOF)与缓存策略
数据结构·redis·缓存
独处东汉10 小时前
freertos开发空气检测仪之输入子系统结构体设计
数据结构·人工智能·stm32·单片机·嵌入式硬件·算法
放荡不羁的野指针10 小时前
leetcode150题-滑动窗口
数据结构·算法·leetcode
BHXDML10 小时前
数据结构:(一)从内存底层逻辑理解线性表
数据结构
小龙报10 小时前
【C语言进阶数据结构与算法】单链表综合练习:1.删除链表中等于给定值 val 的所有节点 2.反转链表 3.链表中间节点
c语言·开发语言·数据结构·c++·算法·链表·visual studio
Anastasiozzzz11 小时前
LeetCode Hot100 215. 数组中的第K个最大元素
数据结构·算法·leetcode
xuedingbue13 小时前
数据结构与顺序表:高效数据管理秘籍
数据结构·算法·链表
求梦82013 小时前
【力扣hot100题】合并两个有序链表(22)
算法·leetcode·链表