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;
    }
}
全部评论

相关推荐

敢逐云霄志:你打招呼语怎么能这么长,hr都没看下去的欲望,简明扼要说重点,就读于某某学校某某专业,26届应届毕业生,学信网可查,先后在某某公司实习过(如有),然后做过什么项目,想找一份什么样的工作,可实习几个月以上,期待您的回复。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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