LeetCode刷题:430. 扁平化多级双向链表(中等)

/*
// 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) {
        dfs(head);
        return head;
    }
    // 采用深度优先算法
    public Node dfs(Node node){
        // 当前节点
        Node cur = node;
        // 当前节点的上个节点
        Node last = null;

        while(cur != null){
            // 当前节点的下个节点
            Node next = cur.next;
            // 如果当前的子列表不为空
            if(cur.child != null){
                // 递归
                Node childLast = dfs(cur.child);
                cur.next = cur.child;
                cur.child.prev = cur;
                if(next != null){
                    childLast.next = next;
                    next.prev = childLast;
                }
                // 将当前节点的子列表置为空
                cur.child = null;
                last = childLast;
            }else{
                last = cur;
            } 
            cur = next;
        }
        return last;
    }
}
全部评论

相关推荐

刷牛客的我很豁达:你是不是对算法有什么误解,你没手握两篇顶刊顶会,还想搞算法岗,有顶刊顶会在算法岗算才入门
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务