java列表类型变量
我已经打破了我的头与下面的代码,我做的。问题是当我这么做的时候 tail.child=null; 它还将我的childPoint的child设置为null。 tail是具有以下定义的实例变量: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
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
也是一个实例变量?