我编写的以下代码一直让我头疼。问题是当我这样做时 尾部.child = null; 它还使我的 childPoint 的 child 为空。 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
设置 e.child = null
。
关于java 列表类型变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27764455/