所以我想做一个单独的列表,以免操纵通过我的方法参数输入的列表。基本上,我希望循环结束时"结果"与"p"相同......但出于某种原因,它并没有正确出来。
private static Node<Integer> multByScalarAndCarry(Node<Integer> p , int k, int c){
int carry = c; //carry is taken from parameter
Node<Integer> result = new Node<Integer>();
Node<Integer> z = result; //head for the copy list
Node<Integer> P = p; //pointer for the list being copied
//copy p into result
while(P.next!=null){
z.item = P.item;
z.next = new Node<Integer>();
z = z.next;
P = P.next;
}
...
}
忽略k和c,它们与我的问题无关。我非常接近完成这种方法,这是我需要的最后一块。请帮忙!
编辑 [解决方案]:对于那些将来遇到此问题的人,我使用复制列表的单独方法进行了一些思考。
这是一个递归解决方案:
private static Node<Integer> copyNode(Node<Integer> p){
if(p == null) //if empty, return the same thing
return p;
Node<Integer> result = new Node<Integer>();
result.item = p.item;// construct a node item copy of p's item
result.next = copyNode(p.next); //attach list doing this for all nodes of p
return result; //return the result.
}
z=z.next 是问题所在。您正在将当前节点更改为之前在该行中实例化的节点。