Skip to content

Latest commit

 

History

History
29 lines (24 loc) · 995 Bytes

430_flattenAMultilevelDoublyLinkedList.md

File metadata and controls

29 lines (24 loc) · 995 Bytes

Solution

Code

class Solution {
public:
    Node* flatten(Node* head)
    {
        for (Node* headPtr = head; headPtr != NULL; headPtr = headPtr->next) {
            if (headPtr->child) {
                Node* next = headPtr->next;     // store next
                headPtr->next = headPtr->child; // set next
                headPtr->next->prev = headPtr;  // set prev
                headPtr->child = NULL;          // set child
                Node* p = headPtr->next;        // pointer to traverse child's layer

                while (p->next) p = p->next;    // Reach to last node of child's layer

                p->next = next; // set last node of child's layer to stored next node
                if (next) next->prev = p; // connect prev of stored next node to child's layer's last node
            }
        }
        return head;
    }
};