Java代码错误链表

Java代码错误链表,java,static,linked-list,Java,Static,Linked List,嗨,我已经有一段时间没有写java了,我似乎找不到这段代码有什么问题。我正在实现从链表中删除节点,但我的程序无法编译。我不断得到: 错误:非静态变量无法从静态上下文引用此变量 Node head = new Node(); 我的main方法中的所有新Node()实例都有一个错误 public class NodeDelete{ class Node { int data; Node next; public Node(){ } } Node Delete(Node hea

嗨,我已经有一段时间没有写java了,我似乎找不到这段代码有什么问题。我正在实现从链表中删除节点,但我的程序无法编译。我不断得到:

错误:非静态变量无法从静态上下文引用此变量

Node head = new Node();
我的main方法中的所有新Node()实例都有一个错误

public class NodeDelete{

 class Node {
 int data;
 Node next;

    public Node(){ }
}


Node Delete(Node head, int position) {
    // Complete this method
        int index = 0;
        Node current = head;
        if (position == 0 ){
            head = head.next;               
        }
        else{
            while (index < (position - 1)){ 
                current = current.next;
            }
            current.next = current.next.next;
        }
        return head;
}

    public static void main(String[] args) {
        Node head = new Node();
        head.data = 0;

        Node node1 = new Node();
        node1.data = 1;

        Node node2 = new Node(); 
        node2.data = 2;

        head.next = node1;
        node1.next = node2;           
    }
}
公共类节点删除{
类节点{
int数据;
节点下一步;
公共节点(){}
}
节点删除(节点头,int位置){
//完成此方法
int指数=0;
节点电流=头;
如果(位置==0){
head=head.next;
}
否则{
而(索引<(位置-1)){
当前=当前。下一步;
}
current.next=current.next.next;
}
回流头;
}
公共静态void main(字符串[]args){
节点头=新节点();
head.data=0;
Node node1=新节点();
节点1.data=1;
Node node2=新节点();
node2.data=2;
head.next=node1;
node1.next=node2;
}
}

或者使
节点
类保持静态
节点删除
类中取出
节点
类。这将解决问题

节点
类是
节点删除
非静态内部类,因此它就像
节点删除
类的成员一样。要访问静态上下文中的任何成员,需要类的实例。这就是为什么这里会出现编译时错误

注意:您在
节点中定义的构造函数与默认构造函数相同。所以不需要定义它。这是多余的

使节点类为静态:

static class Node {
  int data;
  Node next;

  public Node(){  }  // This is same as the default constructor. So this can be remove.
}


从NodeDelete类中取出相同的实现。

节点
是一个非静态的内部类。因此,需要包含类的实例来构造实例:

NodeDelete nd = ...
Node node = nd.new Node();
选择:
  • 使
    节点
    成为静态内部类
  • 使
    节点
    成为顶级类

由于
节点
的方法中没有对
节点删除
的引用,我建议将
节点
设置为静态。

另一个尚未给出的选项,尽管不是我最喜欢的,是实例化包含主方法的类的实例,然后使用它来实例化内部类。就像这样

NodeDelete nd = new NodeDelete(...);
Node n = nd.new Node(...);