java 列表类型变量

标签 java algorithm data-structures

我编写的以下代码一直让我头疼。问题是当我这样做时 尾部.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;

在这里,tailchildPoint.child(引用标识)

然后,你做:

tail.child=null;

这意味着,您实际上设置了 childPoint.child.child = null; - 因为 chilePoint.childtail 是同一个对象。

然后,您分配:

childPoint = childPoint.child;

但是您将 childPoint 分配给您刚刚更改的同一个对象 - 所以新的 childPointchildnull!


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

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

关于java 列表类型变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27764455/

相关文章:

c# - 寻找具有一对一唯一依赖关系的数据结构

memory - 在 Redis 中,是一个大型排序集还是许多小型排序集具有更高的内存性能

java - 如何偏移 GridView 的行边距

java - Android studio-未指定网络安全配置

algorithm - 删除最小权重边以断开一组节点

c - TRIES 实现

java - 使用Optional.of()方法进行方法链接是个好主意吗?

java - JCombobox 和 String.equals(null)

algorithm - 用适当的设计替换特定顺序的 if/else(基于规则/优先级的 if/else)

c++ - 内存布局 : 2D N*M data as pointer to N*M buffer or as array of N pointers to arrays