leetcode:扁平化多级双向链表

版权声明:小能 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;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_43152052/article/details/89304371