c_cpp 430.展平多层次双重链表 - DifficultyMedium - 2018.8.10

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 430.展平多层次双重链表 - DifficultyMedium - 2018.8.10相关的知识,希望对你有一定的参考价值。

/*
// 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* fineTheLastNode(Node *head) {
        if (head == NULL 
           || head->next == NULL) {
            return head;
        }
        
        while (head->next != NULL) {
            head = head->next;
        }
        return head;
    }
    Node* flatten(Node* head) {
        if (head == NULL) return head;
        
        Node *curNode = head;
        Node *tpNextNode;
        while (curNode != NULL) {
            if (curNode->child != NULL) {
                // 先保存下一个指针,可能为空
                tpNextNode = curNode->next;
                // 把child节点和cur节点先链接起来
                curNode->next = curNode->child;
                curNode->child->prev = curNode;
                // 找child链条的最后一个节点,并和上面保存的后续指针进行链接
                Node *childLastNode = fineTheLastNode(curNode->child);
                childLastNode->next = tpNextNode;
                if (tpNextNode != NULL) {
                    tpNextNode->prev = childLastNode;
                }
                // 断开子链表
                curNode->child = NULL;
            }
            curNode = curNode->next;
        }
        return head;
    }
};

以上是关于c_cpp 430.展平多层次双重链表 - DifficultyMedium - 2018.8.10的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 双重链表OO实施

c_cpp 430摩尔斯电码生成器

在 IF 语句中嵌套展平;重新键入多层展平

NSDictionary 展平层次结构

c_cpp 双重指针与间接引用

如何使用 Hive/Pig/MapReduce 展平递归层次结构