LeetCode 430. 扁平化多级双向链表
原题链接
中等
作者:
bruce
,
2020-12-25 16:54:29
,
所有人可见
,
阅读 392
<!--思路都差不多-->
Node * flatten(Node*head)
{
if(head==nullptr) return nullptr;
Node *p = head;
while(p)
{
if(p->child==nullptr)
{
p = p->next;
continue;
}
// case 1: has a child node
Node* temp = p->child;
while(temp->next) temp = temp->next;
temp->next = p->next;
// 链接两根线,next 和 pre
if(p->next!=nullptr) p->next->prev = temp;
p->next = p->child;
p->child->prev = p;
p->child = nullptr;
}
return head;
}
Node* flatten(Node* head)
{
for (Node* h = head; h; h = h->next)
{
if (h->child)
{
Node* next = h->next;
h->next = h->child;
h->next->prev = h;
h->child = NULL;
Node* p = h->next;
while (p->next) p = p->next;
p->next = next;
if (next) next->prev = p;
}
}
return head;
}