2015-10-06 170 views
-1

我正在用Java寫一個鏈表。以下是代碼:將內部類對象作爲函數參數傳遞

public class FunctionalList<T> { 

    class Node { 
     private T data; 
     private Node next; 

     //constructor 
     public Node(T data, Node next) 
     { 
      this.data = data; 
      this.next = next; 
     } 
    } 
    private Node head; 
    /** 
    * default constructor, create an empty list 
    */ 
    public FunctionalList() { 
     head = null; 
    } 

    public FunctionalList<T> add(T element) { 
     FunctionalList<T> newList = new FunctionalList<T>(); 
     add_aux(newList.head, element); 

     return newList; 
    } 

    private void add_aux(Node node, T element) 
    { 
     if (node == null) 
     { 
      Node newNode = new Node(element, null); 
      node = newNode; 
     } 
     else if (node.next != null)  // go to the end of the list 
     { 
      add_aux(node.next, element); 
     } 
     else 
     { 
      Node newNode = new Node(element, null); // create new node 
      node.next = newNode; //add the element to the list 
     } 
    } 
} 

我以遞歸的方式實現了add方法。當我嘗試添加一個元素到列表中時,我失敗了。我跟蹤了add_aux(newList.head,element)之後的問題 - newList.head仍然爲空。

+0

我想你會得到一個NullPointerException,你引用newList.head,因爲它從來沒有初始化。 –

+0

問題應該包括具體的錯誤和代碼來重現它。 –

回答

1
Node newNode = new Node(element, null); 
    node = newNode; 

這是因爲要分配給一個變量node其是本地的方法的引用,並且您假定它會被反射到newList.head

一種方法是你總是返回node並將其分配給newList.head。這樣,它就會有名單的開始。所以你的方法定義如下:

private Node add_aux(Node node, T element) { 
.... // all the code is same. 
return node; // add this in the end. 
} 
相關問題