2014-02-09 190 views
0

我想創建一個鏈表實現這裏使用內部類嵌套類VS靜態內部類

package linkedlist; 

public class linkedList { 

public class Node 
{ 
    int data; 
    public Node next; 
    public Node(int k) 
    { 
     this.data = k; 
     this.next=null; 
    } 

    public Node addToHead(int data) 
    { 
     Node node = new Node(data); 
     Node current = this; 
     node.next=current; 
     return node; 
    } 
} 

public static void findn(Node head) 
{ 
    Node previous=head; 
    Node current = head; 
    int i =1; 
    while(current!=null) 
    { 


        if (i==6) 
     { 
      //System.out.println(current.data); 
      previous.next = current.next; 
      break; 
     } 
        previous=current; 
        current = current.next; 
        i++; 

    } 

} 


public static void main(String args[]) 
{ 
    linkedList list = new linkedList(); 
    linkedList.Node tail = linkedList.new Node(0); 
// list.Node tail = list.Node(0); 


    Node head = tail; 

    for (int i=1;i<=20;i++) 
    { 
     head = head.addToHead(i); 
    } 

    findn(head); 
    while(head!=null) 
    { 
     System.out.println(head.data); 
     head = head.next; 
    } 
} 
} 

我的問題在主函數中我試圖創建一個使用外部類的一個節點。但是,即使我遵循正確的語法,語法也會引發錯誤。我想知道這條語句有什麼問題 「linkedList.Node tail = linkedList.new Node(0);」

+2

**錯誤說**是什麼? – SLaks

+2

你爲什麼使用非靜態的內部類?爲什麼'Node'關心父實例? – SLaks

+0

我知道靜態內部類是正確的方法。我正在嘗試使用內部類。我想知道爲什麼錯誤會拋出。靜態內部類的工作正常,但是當我使用內部類時,它給了我一個錯誤「鏈表不能解析爲變量」 – user3246489

回答

0

你或許應該創建LinkedList類,addToTail()中的一個方法:)

public void addToTail(int k) { 
    Node tail = new Node(k); 
    //loop through all the nodes in the list and add "tail" to the end 
} 

然後就可以調用lst.addToTail(K)在main(其中LST是LinkedList類的一個對象。

順便說一句,它使代碼混淆閱讀時,你開始用小寫字母的類名。他們通常以Java中的大寫字母開頭。調用類LinkedList(以caps開頭)也是令人困惑的,因爲它可能被誤認爲是標準的java.util.LinkedList,所以也許你可以稱它爲LinkedList0或其他東西。

3

作爲非靜態內部類的節點需要其封閉類的實例linkedList是類名。它不涉及該類的一個實例。所以它應該是

list.new Node() 

這將更加清晰,如果你尊重了Java命名約定:變量以小寫字母開頭,並以一個大寫字母類。