版权声明:小能 https://blog.csdn.net/qq_43152052/article/details/89304371
解题思路:
使用指针p来表示当前结点,指针结点n保存当前结点的下一结点,用来跟子链表的最后一个结点相连,然后就是p有child结点的话,p的next指针与child的prev连接一下即可,最后顺着这个思路迭代即可。
class Solution {
public:
Node* flatten(Node* head) {
//迭代解法
if(head == nullptr)
return nullptr;
Node* p = head;
while(p!=nullptr)
{
Node* n = p->next;//保存p的下一个结点
if(p->child != nullptr)//当前结点有子结点
{
Node* c = p->child;//子结点的首结点
p->next = c;//连接子链表
c->prev = p;
p->child = nullptr;//将孩子结点置空
Node* t = c;
while(t && t->next)//t为子链表的尾节点
t = t->next;
t->next = n;//子链表的尾节点连接上一链表的无子结点的结点
if(n != nullptr)
n->prev = t;
}
p = p->next;//进行下一次循环
}
return head;
}
};