leetcode 430 扁平化多级双向链表
思路
思考良久,没有想到什么好方法,这时候只能按部就班分情况讨论
- 链表有子节点
当前节点是否为空?
当前节点为空
当前节点不为空temp.next = temp.child;//temp表示当前节点 temp.child = null; temp.next.prev = temp; temp = temp.next;
先把当前节点的下一个节点入栈,再执行上边的操作stack.add(temp.next); temp.next = temp.child;//temp表示当前节点 temp.child = null; temp.next.prev = temp; temp = temp.next;
- 链表没有子节点
当前节点是否是末尾节点并且栈是不是空的
如果当前节点的下一个节点为空并且栈非空,就把当前节点指向栈中弹出来的节点
否则继续往后走
完整代码
public Node flatten(Node head) {
Node temp = head;
Stack<Node> stack = new Stack<>();
while (temp != null ) {
if (temp.child == null) {
if (temp.next == null && !stack.isEmpty()) {
Node tail = stack.pop();
temp.next = tail;
tail.prev = temp;
}
temp = temp.next;
} else {
if (temp.next != null)
stack.add(temp.next);
temp.next = temp.child;
temp.child = null;
temp.next.prev = temp;
temp = temp.next;
}
}
return head;
}