您将获得一个双向链表,除了下一个和前一个指针之外,它还有一个子指针,可能指向单独的双向链表。这些子列表可能有一个或多个自己的子项,

依此类推,生成多级数据结构,如下面的示例所示。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

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

示例:

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

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄