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

    思路:定义结点cur指向head,然后遍历链表,判断cur结点是否还有子节点,如果不含,cur指向cur的下一个结点,否则将该结点cur含有子结点那个子链表插入到主链表中,
    并且让cur的子节点为空,cur指向cur下一个结点,继续重复上述过程,直到cur指向空。
    代码如下:
    这块需要注意的是将子链表插入时,要分情况,插入到结尾是一种情况,其他位置插入是一种情况,具体看代码
    public Node flatten(Node head) {
            Node cur = head;
            while(cur!=null){
                if(cur.child!=null){
                    Node child = cur.child;
                    Node sign = child;
                    while(child.next!=null){
                        child = child.next;
                    }
                    //结尾插入
                    if(cur.next == null){
                        child.next = cur.next;
                        sign.prev = cur;
                        cur.next = sign;
                    }else{
                        //非结尾插入
                        child.next = cur.next;
                        sign.prev = cur;
                        cur.next.prev = child;
                        cur.next = sign;
                    }
                    cur.child = null;
                }
                cur = cur.next;
            }
            return head;
        }

    有关双向链表的一些基本实现给大家分享一个链接:

    https://github.com/dukaichao/DataStructure/tree/master/doubleList

  • 相关阅读:
    移动端touch事件获取事件坐标
    详解webpack中的hash、chunkhash、contenthash区别
    textarea placeholder 设置主动换行
    js-xlsx的使用
    关于Blob对象的介绍与使用
    spring boot zuul集成kubernetes等第三方登录
    Spring Boot 获取yaml配置文件信息
    spring boot @Value源码解析
    java.lang.StackOverflowError解决
    Jpa 重写方言dialect 使用oracle / mysql 数据库自定义函数
  • 原文地址:https://www.cnblogs.com/du001011/p/10674882.html
Copyright © 2011-2022 走看看