方法一:栈
/*
// Definition for a Node.
class Node {
public:
int val;
Node* prev;
Node* next;
Node* child;
};
*/
class Solution {
public:
Node* flatten(Node* head) {
if(!head)
return NULL;
Node *cur;
stack <Node*> st;
st.push(head); //先将头结点放入栈中
Node *pre = NULL; //头结点没有前一个结点
while(!st.empty()){
cur=st.top(); //判断栈顶
st.pop();
if(cur->next) //如果有next结点放入栈中,注意next先入栈
st.push(cur->next);
if(cur->child){ //如果有child结点放入栈中,注意child后入栈
st.push(cur->child);
cur->child = NULL; //清空child指针
}
if(pre){ //与前一个结点连接,注意头结点没有前结点所以pre初始化为NULL
pre->next=cur;
cur->prev=pre;
}
pre=cur; //当前结点设为前结点
}
return head;
}
};