扁平化多级双向链表——力扣打卡2021.9.24

题目

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

给你位于列表第一级的头节点,请你扁平化列表,使所有结点出现在单级双链表中。

示例 1:

思路

    转换题目,可以将题作为双向链表插入多段链表来做 遍历链表,遇到子链表将其插入到父链表中

代码

/*
// Definition for a Node.
class Node {
    public int val;
    public Node prev;
    public Node next;
    public Node child;
};
*/

class Solution {
          
   
    public Node flatten(Node head) {
          
   
        if(head == null)
            return head;
        fun(head);
        return head;
    }

    public void fun(Node head){
          
   
        Node cur = head;
        while(cur != null){
          
   
            if(cur.child != null){
          
   
                Node tmp = cur.next;
                cur.next = cur.child;
                cur.next.prev = cur;
                cur.child = null;
                //找子链表的结尾
                Node last = cur;
                while(last.next != null){
          
   
                    last = last.next;
                }
                last.next = tmp;
                if(tmp != null){
          
   
                    tmp.prev = last;
                }
            }
            cur = cur.next;
        }
    }
}
经验分享 程序员 微信小程序 职场和发展