内部类与静态内部类

时间:2014-02-09 17:47:13

标签: java

我正在尝试使用内部类

创建链接列表实现
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;
    }
}
}

我在main函数中的问题我试图使用外部类创建一个节点。但即使我遵循正确的语法,语法也会给我一个错误。我想知道这句话有什么问题      “linkedList.Node tail = linkedList.new Node(0);”

2 个答案:

答案 0 :(得分:3)

作为非静态内部类的Node需要其封闭类的实例linkedList是类名。它不是指类的实例。所以它应该是

list.new Node()

如果您尊重Java命名约定,那将更加清晰:变量以小写字母开头,而类以大写字母开头。

答案 1 :(得分:0)

您应该在class 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
}

然后你可以在main()中调用lst.addToTail(k),其中lst将是class linkedList的对象。

顺便说一句,当您使用小写字母开始类名时,它会使代码混乱。它们通常以Java中的大写字母开头。调用LinkedList类(从大写开始)也很混乱,因为它可能被误认为是标准的java.util.LinkedList,所以也许你可以称之为LinkedList0或其他东西。