在链表 (java) 的末尾添加一个节点



这是我的链表代码(不是主列表)。方法"addLast"给了我以下错误,我不确定如何解决它:"无法从静态上下文引用非静态变量"。它正在谈论这一行:返回新的节点(x,null);我将不胜感激有关如何解决此问题的任何帮助。谢谢

public class LinkedList
{
  private class Node 
    { 
        int item;
        Node link;
        public Node ()
        {
            item = Integer.MIN_VALUE;
            link = null;
        }
        public Node (int x, Node p)
        {  
            item = x;
            link = p;
        }
    } //End of node class

    private Node head;

    public LinkedList()
    {
        head = null;
    }
    //adds a node to the start of the list with the specified data
    //added node will be the first node in the list
    public void addToStart(int x)
    {
        head = new Node(x, head);
    }

    //adds a number at end of list 
    public static Node addLast(Node header, int x)
    { 
        // save the reference to the header so we can return it. 
        Node ret = header; 
        // check base case, header is null. 
        if (header == null) { 
            return new Node(x, null); 
        } 
        // loop until we find the end of the list 
        while ((header.link != null)) { 
            header = header.link; 
        } 
        // set the new node to the Object x, next will be null. 
        header.link = new Node(x, null); 
        return ret; 
    }

    //displays the list
    public void printList()
    {
        Node position = head;
        while(position != null)
        {
            System.out.print(position.item + " ");
            position = position.link;
        }
        System.out.println();
    }
}

以下是两种解决方案:

使Node成为静态嵌套类:

private static class Node { ... }

或者,将addLast方法设置为实例方法:

public Node addLast(Node header, int x) { ... }

addLast中删除static限定符 - 它必须是非静态的才能有一个列表添加到末尾。 它也不应该接受(或返回)Node,因为Node是一个私有嵌套类,所以这个类之外的代码不知道(或关心)Node是什么,所以不能有一个传递。

public void addLast(int x) {
    if (head == null) head = new Node(x, null);
    else {
        Node p = head;
        while (p.link != null) p = p.link;
        p.link = new Node(x, null); } }

答案在错误行中:

不能从静态上下文引用非静态变量

删除方法 addLaststatic

public Node addLast(Node header, int x) 
{
  ....
}

相关内容

  • 没有找到相关文章

最新更新