LeetCode刷题——扁平化多级双向链表#430#Medium

本文探讨了如何使用深度优先搜索(DFS)和迭代方法扁平化多级双向链表,提供了Java和Python的代码示例,并寻求优化策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

扁平化多级双向链表的思路探讨与源码
    扁平化多级双向链表的题目如下图,该题属于链表类和搜索类型的题目,主要考察对于搜索方法的使用和链表结构的理解。本文的题目作者想到2种方法,分别是DFS深度优先搜索方法和迭代方法,其中DFS深度优先搜索方法使用Java进行编写,而迭代方法使用Python进行编写,当然这可能不是最优的解法,还希望各位大佬给出更快的算法。
在这里插入图片描述
    本人认为该题目可以使用DFS深度优先搜索方法的思路进行解决,首先初始化节点,然后开始遍历链表,读取当前链表的下一个节点,对下一个节点判断是否为空,如果不是就开始进行深度优先搜索,得到一个子节点搜索结果,继续搜索后一个节点是否为空,如果是就把搜索结果和节点换个位置,按此思路直到遍历结束,并返回最终结果。那么按照这个思路我们的Java代码如下:

#喷火龙与水箭龟
class Solution {
    public Node flatten(Node head) {
        dfsSearch(head);
        return head;
    }

    public Node dfsSearch(Node node) {
        Node cur = node;
        Node lastNode = null;
        while (cur != null) {
            Node next = cur.next;
            if (cur.child != null) {
                Node childLast = dfsSearch(cur.child);
                next = cur.next;
                cur.next = cur.child;
                cur.child.prev = cur;
                if (next != null) {
                    childLast.next = next;
                    next.prev = childLast;
                }
                cur.child = null;
                lastNode = childLast;
            } else {
                lastNode = cur;
            }
            cur = next;
        }
        return lastNode;
    }
}

在这里插入图片描述
    显然,我们的DFS深度优先搜索方法的效果不错,还可以用迭代方法进行解决。首先判断链表是否为空,如果是就直接返回。然后初始化一个链表,新建一个双端队列,将链表头插入到双端队列,开始遍历双端队列,取出一个队列元素并赋值初使化的链表,再判断取出的队列元素是否不为空,如果是就把下一个结果插入到队列中,按照这个思路进行遍历循环,直到遍历结束并返回结果。所以按照这个思路就可以解决,下面是Python代码:

#喷火龙与水箭龟
class Solution:
    def flatten(self, head: 'Node') -> 'Node':
        if head == None:
            return head
        dummy = Node(-1, None, None, None)
        preNode = dummy

        dequeList = collections.deque()
        dequeList.append(head)
        while dequeList:
            x = dequeList.pop()
            preNode.next = x
            x.prev = preNode
            if x.next != None:
                dequeList.append(x.next)
            if x.child != None:
                dequeList.append(x.child)
                x.child = None
            preNode = x
        dummy.next.prev = None
        return dummy.next

在这里插入图片描述
    从结果来说Java版本的DFS深度优先搜索方法的效率不错,而Python版本的迭代方法的速度也比较不错,但应该是有更多的方法可以进一步提速的,希望朋友们能够多多指教,非常感谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值