Flatten a Multilevel Doubly Linked List 扁平化多级双向链表
程序员文章站
2022-03-04 19:01:04
...
您将获得一个双向链表,除了下一个和前一个指针之外,它还有一个子指针,可能指向单独的双向链表。这些子列表可能有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。
扁平化列表,使所有结点出现在单级双链表中。您将获得列表第一级的头部。
示例:
输入: 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
以上示例的说明:
给出以下多级双向链表:
我们应该返回如下所示的扁平双向链表:
思路:这道题直接用栈就阔以搞定,分三种情况:
1:如果当前节点有孩子节点,把当前节点的下一个节点放入栈中,并且把当前节点的孩子节点指向当前节点的下一个节点
2:否则如果当前节点的下一个节点为空且栈不为空(已经处理完所有的带孩子节点的节点,现在已经到了孩子节点的最后一个节点),那么显而易见的根据题意我们需要把孩子节点的最后一个节点指向当前节点。
3:每次都更新当前节点为下一个节点
参考代码:
/*
// Definition for a Node.
class Node {
public:
int val = NULL;
Node* prev = NULL;
Node* next = NULL;
Node* child = NULL;
Node() {}
Node(int _val, Node* _prev, Node* _next, Node* _child) {
val = _val;
prev = _prev;
next = _next;
child = _child;
}
};
*/
class Solution {
public:
Node* flatten(Node* head) {
if (!head) return head;
Node* p = head;
stack<Node*> s;
while (p) {
if (p->child) {
s.push(p->next);
p->next = p->child;
if (p->next) p->next->prev = p;
p->child = nullptr;
}
else if (p->next == nullptr && !s.empty()) {
p->next = s.top(); s.pop();
if (p->next) p->next->prev = p;
}
p = p->next;
}
return head;
}
};
上一篇: 纯HTML个人简历模板代码
下一篇: 表格标签案例---个人简历
推荐阅读
-
430. Flatten a Multilevel Doubly Linked List
-
LeetCode解题分享:430. Flatten a Multilevel Doubly Linked List
-
【LeetCode】430. Flatten a Multilevel Doubly Linked List 解题报告(Python)
-
430. Flatten a Multilevel Doubly Linked List
-
[LC] 430. Flatten a Multilevel Doubly Linked List
-
430-扁平化多级双向链表(Flatten a Multilevel Doubly Linked List)
-
LeetCode 430. Flatten a Multilevel Doubly Linked List
-
[LeetCode] 430. Flatten a Multilevel Doubly Linked List
-
430. Flatten a Multilevel Doubly Linked List(扁平化多级双向链表)
-
leetcode 430. flatten-a-multilevel-doubly-linked-list扁平化多级双向链表 python3