2013-10-22 52 views
-1

所以我想製作一個單獨的列表,以便不通過我的方法參數操縱正在輸入的列表。基本上我希望「結果」在循環結束時與「p」相同......但由於某種原因,它不能正確出現。試圖複製Java鏈接列表...我做錯了什麼?

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,它們與我的問題無關。我很接近完成這種方法,這是我需要的最後一個部分。請幫忙!

編輯[SOLUTION]: 對於未來有這個問題的人,我做了一些思考,使用單獨的方法複製列表。

這裏是一個遞歸解決方案:

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. 
} 
+0

does ['Node.cloneNode()'](http://docs.oracle.com/javase/7/docs/api/org/w3c/dom/Node.html#cloneNode%28boolean%29)不足? – Jaycal

+0

什麼是「不是正確的」意思,更具體地說? – alexroussos

+0

「不正確」意味着除了某些原因外,所有內容都是相同的,最後一個節點的值不爲空(項目爲null,下一個爲null,但不爲null)。 而這個節點是從零開始的,我們應該從零開始做這樣的事情。對不起英語 –

回答

1

Z = z.next就是問題所在。您正在將當前節點更改爲之前行中的實例。