• LeetCode 430. Flatten a Multilevel Doubly Linked List


    原题链接在这里:https://leetcode.com/problems/flatten-a-multilevel-doubly-linked-list/description/

    题目:

    You are given a doubly linked list which in addition to the next and previous pointers, it could have a child pointer, which may or may not point to a separate doubly linked list. These child lists may have one or more children of their own, and so on, to produce a multilevel data structure, as shown in the example below.

    Flatten the list so that all the nodes appear in a single-level, doubly linked list. You are given the head of the first level of the list.

    Example:

    Input:
     1---2---3---4---5---6--NULL
             |
             7---8---9---10--NULL
                 |
                 11--12--NULL
    
    Output:
    1-2-3-7-8-11-12-9-10-4-5-6-NULL
    

    Explanation for the above example:

    Given the following multilevel doubly linked list:

    We should return the following flattened doubly linked list:

    题解:

    如果当前点cur 没有child, 直接跳到cur.next 进行下次计算.

    如果cur 有child, 目标是把cur.child这个level提到cur这个level上. 至于cur.child 这个level上有没有点有child 先不管. 

    做法就是cur.child 一直只按next找到tail, 然后这一节插在cur 和 cur.next之间, cur再跳到更新的cur.next上.

    Time Complexity: O(n). n是所有点的个数, 每个点只走过constant次数.

    Space: O(1).

    AC Java:

     1 /*
     2 // Definition for a Node.
     3 class Node {
     4     public int val;
     5     public Node prev;
     6     public Node next;
     7     public Node child;
     8 
     9     public Node() {}
    10 
    11     public Node(int _val,Node _prev,Node _next,Node _child) {
    12         val = _val;
    13         prev = _prev;
    14         next = _next;
    15         child = _child;
    16     }
    17 };
    18 */
    19 class Solution {
    20     public Node flatten(Node head) {
    21         if(head == null){
    22             return head;
    23         }
    24         
    25         Node cur = head;
    26         while(cur != null){
    27             if(cur.child == null){
    28                 cur = cur.next;
    29                 continue;
    30             }
    31             
    32             Node child = cur.child;
    33             Node childTail = child;
    34             while(childTail.next != null){
    35                 childTail = childTail.next;
    36             }
    37             
    38             cur.child = null;
    39             child.prev = cur;
    40             childTail.next = cur.next;
    41             if(cur.next != null){
    42                 cur.next.prev = childTail;
    43             }
    44             cur.next = child;
    45             cur = cur.next;
    46         }
    47         
    48         return head;
    49     }
    50 }

    类似Flatten Binary Tree to Linked List.

  • 相关阅读:
    C语言知识
    Java课程设计——个人
    Java大作业
    DAO模式代码阅读及应用
    有理数设计
    泛型 -Java
    集合框架之ArrayList -Java
    图总结
    树、二叉树、查找算法总结
    编辑器、编译器、文件、IDE等常见概念辨析
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/9596026.html
Copyright © 2020-2023  润新知