2017-11-28 10 views
1

私のコードを実行するたびにプログラムが永遠に続き、リンクされたリストの他のものはすべて正常に動作します。削除を含む。リンクリストの中で最小値を見つける

public Node smallestValue() { 
    Node current = firstL; 
    int min = current.data; 

    if (!isEmpty()) { 
     while (current != null) { 
      if (min < current.data) { 
       min = current.data; 
       current = current.next; 
      } 
     } 
    } else { 
     System.out.println("empty list"); 
    } 

    System.out.println(); 
    System.out.println(min); 

    return current; 
} 
+3

'current = current.next'を' if'文の外に移動します。 – Oswald

+1

あなたの状態は間違っています。 'if(min> current.data)'でなければなりません。 – 0x499602D2

答えて

2

あなたがcurrentかどうかmin < current.dataを進める必要があります。割り当てをifの外に移動するだけです。 (また、0x499602D2は、あなたはそれがcurrent.dataより大きい場合minを変更する必要がある最小値を見つけるために、コメントで指摘しています。@として)

while(current != null){ 
    if(min > current.data){ 
     min = current.data; 
    } 
    current = current.next; 
} 

forループとしてこれを行うにはきれいかもしれません:

for (Node current = firstL, int min = current.data; 
    current != null; 
    current = current.next) 
{ 
    min = Math.min(min, current.data); 
} 

これは空のリストのためのテストの内側にあるのでfirstLnullであれば、これは(私が想定している、リストが空でない場合に発生することはできません)クラッシュしないという利点があります。

+0

ああありがとう!今働く – abc123

関連する問題