zoukankan      html  css  js  c++  java
  • 扁平化多级双向链表

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

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

    示例:

    输入:
    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:

    public Node flatten(Node head) {
        /*如果双向链表是空则返回空*/
        if (head == null) {
          return null;
        }
        /*展开双向链表*/
        helper(head);
        /*返回头节点*/
        return first;
      }
    
      public void helper(Node node) {
        /*当节点不为空时*/
        while (node != null) {
          /*尾节点不为空时,赋值尾节点的下一个节点是当前节点,当前节点的上一个节点是尾节点,当尾节点为null时,说明是初始化,赋值头节点为当前节点*/
          if (last != null) {
            last.next = node;
            node.prev = last;
          } else {
            first = node;
          }
          /*尾节点赋值为当前节点*/
          last = node;
          /*当前节点的孩子节点不为空时,先暂存当前节点的下一个节点,递归遍历孩子节点,然后当前节点的孩子节点赋值为空,当前节点指向前面暂存的下一个节点*/
          if (node.child != null) {
            Node tmp = node.next;
            helper(node.child);
            node.child = null;
            node = tmp;
          } else {
            /*当前节点指向下一个节点*/
            node = node.next;
          }
        }
      }
    
      /**
       * 定义一个尾节点
       */
      private Node last;
      /**
       * 定义一个头节点
       */
      private Node first;
    View Code 

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/flatten-a-multilevel-doubly-linked-list

  • 相关阅读:
    Spring Cloud Gateway 路由动态配置
    Spring cloud Gateway HTTS配置
    Spring Gateway 全局过滤器 Global Filters
    Spring Cloud Gateway内置GatewayFilter工厂类(四)
    Spring Cloud Gateway内置GatewayFilter工厂类(三)
    lumen框架的辅助函数
    php算法基础----时间复杂度和空间复杂度
    php数据结构之二叉树
    PHP利用二叉堆实现TopK-算法的方法详解
    php实现菲波那切数列和杨辉三角
  • 原文地址:https://www.cnblogs.com/wuyouwei/p/11826084.html
Copyright © 2011-2022 走看看