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

  • 相关阅读:
    OpenCV中Mat,图像二维指针和CxImage类的转换
    opencv reduce()函数
    vc 6.0添加版本信息
    tesseract::TessBaseAPI api
    lnk1146 erro,solution
    LNK2001 error 解决方法
    Error LNK2038 mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease'
    APP后台架构开发实践笔记
    从0到1 快速建一个区块链
    App 后台架构
  • 原文地址:https://www.cnblogs.com/du001011/p/10674882.html
Copyright © 2011-2022 走看看