• Leetcode 430.扁平化多级双向链表


    扁平化多级双向链表

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

    扁平化列表,使所有结点出现在单级双链表中。您将获得列表第一级的头部。

       

    示例:

    输入:

    1---2---3---4---5---6--NULL

    |

    7---8---9---10--NULL

    |

    11--12--NULL

    输出:

    1-2-3-7-8-11-12-9-10-4-5-6-NULL

       

    以上示例的说明:

    给出以下多级双向链表:

       

    我们应该返回如下所示的扁平双向链表:

    思路:这道题直接用栈就阔以搞定,分三种情况:

    1:如果当前节点有孩子节点,把当前节点的下一个节点放入栈中,并且把当前节点的孩子节点指向当前节点的下一个节点

    2:否则如果当前节点的下一个节点为空且栈不为空(已经处理完所有的带孩子节点的节点,现在已经到了孩子节点的最后一个节点),那么显而易见的根据题意我们需要把孩子节点的最后一个节点指向当前节点。

    3:每次都更新当前节点为下一个节点

     1 import java.util.Stack;
     2 
     3 // Definition for a Node.
     4 class Node {
     5     public int val;
     6     public Node prev;
     7     public Node next;
     8     public Node child;
     9 
    10     public Node() {}
    11 
    12     public Node(int _val,Node _prev,Node _next,Node _child) {
    13         val = _val;
    14         prev = _prev;
    15         next = _next;
    16         child = _child;
    17     }
    18 };
    19 
    20 class Solution {
    21     public Node flatten(Node head) {
    22         if(head==null) return head;
    23         Node p=head;
    24         Stack<Node> s=new Stack<Node>();
    25         while(p!=null){
    26             if(p.child!=null){
    27                 s.push(p.next);
    28                 p.next=p.child;
    29                 if(p.next!=null) p.next.prev=p;
    30                 p.child=null;
    31             }else if(p.next==null&&!s.empty()){
    32                 p.next=s.pop();
    33                 if(p.next!=null) p.next.prev=p;
    34             }
    35             p=p.next;
    36         }
    37         return head;
    38     }
    39 }
  • 相关阅读:
    jar包和war包的介绍和区别
    Jenkins安装完成后,一直停留在页面Please wait while Jenkins is getting ready to work...的解决方法
    mongdb简介
    loadrunner12的安装教程
    airpods2隐藏的使用技巧(十)点
    银行个人住房贷款LPR办理流程-建行app
    一张图了解地摊经济时代如何摆摊
    每天学五分钟 Liunx 001 | 用户及用户组
    每天学五分钟 Liunx 000 | 计算机与 Liunx
    【转载】资深大牛吐血总结:如何成为一名合格的云架构师?
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10242229.html
Copyright © 2020-2023  润新知