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 展平递归层次结构