java列表类型变量

java列表类型变量,java,algorithm,data-structures,Java,Algorithm,Data Structures,我已经打破了我的头与下面的代码,我做的。问题是当我这么做的时候 tail.child=null; 它还将我的childPoint的child设置为null。 tail是具有以下定义的实例变量: public List tail; public void removeMultiLinkList() { List headPoint = head; while (headPoint.next != null) { List childPoint = headPoint

我已经打破了我的头与下面的代码,我做的。问题是当我这么做的时候 tail.child=null; 它还将我的childPoint的child设置为null。 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;
在这里,
tail
childPoint.child
(参考标识)

然后,你要:

tail.child=null;
这意味着您实际设置了
childPoint.child.child=null-因为同一对象的
chilePoint.child
tail
是不同的名称

然后,您分配:

childPoint = childPoint.child;
但是,您将childPoint指定给刚刚更改的同一对象-因此新的
childPoint
child
,是
null


一个非常简单的解决方法是按值(通过创建复制构造函数)将元素从一个列表复制到另一个列表


另一种方法可能是继续复制引用,但根本不更改
child
。在算法结束时,对列表中的每个元素进行一些后处理并设置
e.child=null

By@Jeremy:你能给我们看看你正在使用的
list
类吗?另外,我假设
head
也是一个实例变量?