扁平化多级链表深度明智的 Javascript 程序集 2
我们已经讨论了多级链表的扁平化,其中节点有两个指针 down 和 next。在上一篇文章中,我们将链表逐层展平。当我们总是需要在每个节点的 next 之前处理向下指针时,如何展平链表。
Input:
1 - 2 - 3 - 4
|
7 - 8 - 10 - 12
| | |
9 16 11
| |
14 17 - 18 - 19 - 20
| |
15 - 23 21
|
24
Output:
Linked List to be flattened to
1 - 2 - 7 - 9 - 14 - 15 - 23 - 24 - 8
- 16 - 17 - 18 - 19 - 20 - 21 - 10 -
11 - 12 - 3 - 4
Note: 9 appears before 8 (When we are
at a node, we process down pointer before
right pointer)
资料来源:甲骨文采访
如果我们仔细观察,我们会注意到这个问题类似于树到链表的转换。我们通过以下步骤递归地展平一个链表:
- 如果节点为 NULL,则返回 NULL。
- 存储当前节点的下一个节点(在步骤 4 中使用)。
- 递归地展平列表。在展平时,跟踪最后访问的节点,以便在它之后链接下一个列表。
- 递归地展平下一个列表(我们从步骤 2 中存储的指针获取下一个列表)并将其附加到最后访问的节点之后。
下面是上述思想的实现。
Javascript
Javascript
输出:
1 2 7 9 14 15 23 24 8 16 17 18 19 20 21 10 11 12 3 4
使用堆栈数据结构的替代实现
Javascript
请参考关于扁平化多级链表的完整文章 | Set 2 (Depth wise) 了解更多详情!