我一直在用下面的代码打破我的脑袋。问题是当我这样做的时候
tail.child=空;
它也使我的childpoint的孩子为空。
tail是具有以下定义的实例变量:

public List tail;
public void removeMultiLinkList() {
    List headPoint = head;
    while (headPoint.next != null) {
        List childPoint = headPoint;
        while (childPoint.child != null) {
            tail.next = childPoint.child;
            tail = tail.next;
            tail.child=null;
            childPoint = childPoint.child;
        }
        headPoint = headPoint.next;
    }
}

提出了一种解决多级链表问题的方法,并用非递归的方法将其转化为线性单链表。

最佳答案

检查你在做什么:

tail.next = childPoint.child;
tail = tail.next;

在这里,tailchildPoint.child(引用标识)
然后,你会:
tail.child=null;

这意味着您实际上设置了childPoint.child.child = null;-因为chilePoint.childtail是同一对象的不同名称。
然后,分配:
childPoint = childPoint.child;

但是您将childpoint分配给刚刚更改的同一个对象,所以新的childPoint'schild,就是null
一个非常简单的解决方法是按值(通过创建复制构造函数)将元素从一个列表复制到另一个列表。
另一种选择可能是继续复制引用-但根本不更改child在算法结束时,进行一些后处理,并为列表中的每个元素设置e.child = null

10-04 13:38