2015-01-18 1 views
1

Я создал этот класс 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); 

    } 

} 

Любая идея, почему я продолжаю geeting эту ошибку компиляции:

Node.java:34: ошибка: нестатический метод findmax (Node) не может ссылаться на статический контекст findmax (a);

ответ

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; 

}

0

Добавьте модификатор static в findMax:

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

Ваш метод до сих пор не работает, потому что все узлы отсоединены. Вы можете соединить их с a.next = b, b.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; 
} 
0
public static Node findmax(Node head){ 
    Node max; 
    while (head.hasNext()){ 

    } 
} 
+0

Я только что сделал это, и это происходит: Исключение в потоке «main» java.lang.NullPointerException \t у Node.findmax (Node.java:18) \t у Node.main (Node.java:34) –

+0

Вы сделали проверьте значение 'next'' '= null' – roeygol

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; 
} 
+0

вы можете дать мне цитату о том, что делать? –

 Смежные вопросы

  • Нет связанных вопросов^_^