如何在java中实现链表?

时间:2015-12-26 21:02:19

标签: linked-list

我根据EPI的书从头开始实现一个链表。但是,在创建列表节点时这是一个错误。

我的代码是

public class Example {

    class ListNode<T> {
        public T data;
        public ListNode<T> next;

        ListNode(T data, ListNode<T> next) {
            this.data = data;
            this.next = next;
        }
    }

    public static void main(String[] args) {
        System.out.println("Hello world.");
        ListNode<Integer> p1  = new ListNode<Integer>(123, null);
    }

}

此错误是

Example.java:19: error: non-static variable this cannot be referenced from a static context
        p1 = new ListNode<Integer>(123, null);
             ^
1 error

当我稍微修改它时它会起作用。

public static class ListNode<T> {
    public T data;
    public ListNode<T> next;

    ListNode(T data, ListNode<T> next) {
        this.data = data;
        this.next = next;
    }
}

但为什么我要添加静态?

3 个答案:

答案 0 :(得分:0)

当我稍微修改它时它会起作用。

public static class ListNode<T> {
        public T data;
        public ListNode<T> next;

        ListNode(T data, ListNode<T> next) {
            this.data = data;
            this.next = next;
        }
    }

但为什么我要添加静态?

答案 1 :(得分:0)

您无法从静态访问非静态变量,但您可以从非静态访问静态。你的主要方法是静态的,这就是你有错误的原因。阅读有关静态和非静态之间差异的更多信息。

I want to know the difference between static method and non-static method

I want to know the difference between static class and non-static class

答案 2 :(得分:0)

在您提供的示例中,您试图直接实例化内部类。

内部类与其外部类的实例绑定(请参阅:JLS 8.1.3)。简而言之,如果没有Example.ListNode实例,则无法拥有Example实例!

因此,您可以选择以下选项:

  1. ListNode移出Example,使其成为顶级课程。然后,您将能够在主方法中实例化ListNode
  2. ListNode标记为static,这有效地使其成为顶级课程。
  3. Example中创建main个实例。例如Example example = new Example();。然后,您应该可以通过调用ListNode来创建new example.ListNode();的实例。