扁平化多级双向链表——力扣打卡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; } } }