扁平化多级双向链表

文章目录

问题

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

多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。

给你位于列表第一级的头节点,请你扁平化列表,使所有结点出现在单级双链表中。
给定
在这里插入图片描述
输出
在这里插入图片描述

解决

很明显是个递归问题,主要就是这个深度优先遍历怎么写。

主要就是存储一个last,记录已经扁平化序列的末尾,然后每次将其与当前节点相连,再将其变为当前节点,然后整理child,将child设为None,再整理next

python实现

class Solution(object):
    def flatten(self, head):
        """
        :type head: Node
        :rtype: Node
        """
        self.last = None
        def dfs(node):
            if not node:
                return 
            nxt = node.next
            if self.last:
                self.last.next, node.prev = node, self.last
            self.last = node
            dfs(node.child)
            node.child = None
            dfs(nxt)
        dfs(head)
        return head

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值