单链表最大密钥搜索

时间:2015-01-18 21:31:13

标签: java search singly-linked-list

我创建了这个Node类,我希望找到具有最大密钥的节点并将其返回:

class Node{
    int key;
    Node next;
    Node(int x){ key = x; next = null; 
    }
    int max = 0;


    Node findmax(Node h){
        if(h==null) return null;

        int max = 0;
        Node t= null;
        for(t=h; t!=null; t=t.next){
            if(t.next.key>t.key) max=t.next.key;
            t=t.next;
        }
        return t;
    }


    public static void main(String[] args){
        Node a = new Node(0);
        Node b = new Node(5);
        Node c = new Node(12);
        Node d = new Node(-12);
        Node e = new Node(124);
        Node f = new Node(2321);
        Node g = new Node(-231);

        findmax(a);

    }

}

知道我为什么要继续编译这个编译错误:

Node.java:34:错误:无法从静态上下文引用非静态方法findmax(Node)     findmax(一);

4 个答案:

答案 0 :(得分:0)

static修饰符添加到findMax

static Node findmax(Node h) { ... }

您的方法仍然无效,因为所有节点都已断开连接。您可以将它们与a.next = bb.next = c等连接起来。此外,您实际上永远不会返回最大节点:

static Node findmax(Node h){
    if(h == null) return null;

    Node max = h;

    Node t;
    for(t = h; t.next != null; t = t.next){
        if(t.key > max.key)
            max = t;
    }

    return max;
}

答案 1 :(得分:0)

public static Node findmax(Node head){
    Node max;
    while (head.hasNext()){

    }
}

答案 2 :(得分:0)

这是因为findMax(Node)不是静态的。

要解决此问题,您可以将其设为静态:

public static Node findMax(Node head) {
   ...  
}

但是,当您编写此代码时,它总是会找到您传入的节点,因为您从未在任何地方设置任何next指针。

另一种选择是将其作为Node上的方法实现,并假设您调用的节点是头节点...

public Node findMax() {
    Node head = this;
    // etc...
}

最后,如果你传入一个NullPointerException,那么这个实现就会出错:你将获得Node

 Node t= null;
 for(t=h; t!=null; t=t.next) {
    // If t.next == null, the next line will fail.
    // You check for t != null for the loop condition, but not t.next != null
    if(t.next.key>t.key) max=t.next.key; 
    t=t.next;
 }

答案 3 :(得分:0)

public Node findNode()
{   
    Node node = nodeList.getHead(); // get the head of the list
    Node prev = null;               // stores the previous node


    while(node != null)
    {   
        if(prev != null && prev.getKey() > node.getKey())
        {
            Node maxNode = prev;
        }

        // store node as prev and get the next node
        prev = node;
        node = node.getNext();
     }

return maxNode;

}