我一直在用下面的代码打破我的脑袋。问题是当我这样做的时候
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;
在这里,
tail
是childPoint.child
(引用标识)然后,你会:
tail.child=null;
这意味着您实际上设置了
childPoint.child.child = null;
-因为chilePoint.child
和tail
是同一对象的不同名称。然后,分配:
childPoint = childPoint.child;
但是您将childpoint分配给刚刚更改的同一个对象,所以新的
childPoint
'schild
,就是null
!一个非常简单的解决方法是按值(通过创建复制构造函数)将元素从一个列表复制到另一个列表。
另一种选择可能是继续复制引用-但根本不更改
child
在算法结束时,进行一些后处理,并为列表中的每个元素设置e.child = null
。