430. Flatten a Multilevel Doubly Linked List

/*
// 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 == NULL)   return head;
        flatten2(head);
        return head;
    }
    Node* flatten2(Node* head) {    // flatten and return tail
        Node* ret = head;
        while (head) {
            ret = head;
            if (head->child) {
                Node* tail = flatten2(head->child);
                tail->next = head->next;
                if (tail->next)
                    tail->next->prev = tail;
                head->next = head->child;
                head->next->prev = head;
                head->child = NULL;
                head = tail->next;
                ret = tail;
            }
            else {
                head = head->next;
            }
        }
        return ret;
    }
};

 

posted @ 2018-11-20 14:54  JTechRoad  阅读(82)  评论(0编辑  收藏  举报