扁平化多级双向链表 day08

leetcode 430 扁平化多级双向链表

在这里插入图片描述

思路

思考良久,没有想到什么好方法,这时候只能按部就班分情况讨论

  1. 链表有子节点
    当前节点是否为空?
    当前节点为空
    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;
    
  2. 链表没有子节点
    当前节点是否是末尾节点并且栈是不是空的
    如果当前节点的下一个节点为空并且栈非空,就把当前节点指向栈中弹出来的节点
    否则继续往后走

完整代码

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;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值