我有一个由节点组成的线性链表:
class Node{
Object data;
Node link;
public Node(Object pData, Node pLink){
this.data = pData;
this.link = pLink;
}
public String toString(){
if(this.link != null){
return this.data.toString() + this.link.toString();
}else{
return this.data.toString() ;
}
}
public void inc(){
this.data = new Integer((Integer)this.data + 1);
}
public Node copy(){
return new Node(this.data, this.link.copy());
}
}
我想制作一份清单的深层副本。然后递增原始列表的每个节点并打印两者。我不知道代码是否正确。
class Aufg1{
public static void main(String args[]){
Node node3 = new Node(new Integer(3), null);
Node node2 = new Node(new Integer(2), node3);
Node node1 = new Node(new Integer(1), node2);
System.out.println(node1.copy().toString());
System.out.println(node1.toString());
}
}
...第二张println只给了123,但副本有问题。有什么想法吗?
更新
public Node copy(){
if(this.link != null){
return new Node(new Integer((Integer)this.data), this.link.copy());
}else{
return new Node(new Integer((Integer)this.data), null);
}
}
答案 0 :(得分:3)
深层复制意味着您还需要复制数据。
public Node copy(){
return new Node(copy of this.data, this.link.copy());
}
因此,您需要决定如何复制对象。
编辑:您可以使用Deep Cloning Library之类的内容来提供帮助。他们使用反射等。如果您知道自己创建对象类的对象类型,则可以创建一个复制构造函数。
答案 1 :(得分:1)
好吧,从链接可能为null的事实判断,您可能希望避免在不先检查的情况下调用this.link.copy()。我猜你所说的问题是一个空指针异常。
编辑:
是的,文森特说的是什么。 :)请务必复制该对象。