2017-08-12 17 views
0

LinkedListの最後のk番目の要素を見つけるために、以下のコードを使用しようとしています。 なぜそれが常にnullを返しますか?LinkedList findElement

public Node findElem(Node head, int k){ 
    if(k < 1|| k > this.length()){ 
     System.out.println("error"); 
    } 
    Node p1=head; 
    Node p2 = head; 
    for(int i=0;i<k-1;i++) { 
     p1 = p1.next; 
    } 
    while(p1 != null){ 
      p1= p1.next; 
      p2 = p2.next; 
    } 
    return p2; 
} 
+1

このコードはどこにありますか?単に複数の理由で正しくはありません。あなたが今やっていることは、リンクされたリストの最後に 'null 'を見つけて返すことです。 –

+0

ようこそスタックオーバーフロー!デバッガの使い方を学ぶ必要があるようです。 [補完的なデバッグ手法](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)にご協力ください。その後も問題が残っている場合は、より具体的な質問に戻ってください。 –

答えて

0

あなたはそのコードで何をしようとしていますか?私はあなたがk番目のノードであるLinkedListのNodeを見つけることを試みていると思いますか? しかし、すべての点であなたのコードは完全に役に立たない。これは、あなたが探していたものです

public Node findElem(Node head, int k) { 
    if(k < 1 || k > this.length()) { 
     System.out.println("Error"); 
     return null; 
    } 
    Node position = head; 
    while(k > 0) { 
     position = position.next; 
     k--; 
    } 
    return position; 
} 

希望: それはそのような何かでなければなりません。もし私に再度お気軽にお尋ねください。

+0

ありがとうございます。わかった。 –

+0

これは、LinkedListのk番目のノードがLinkedListの最後のk番目の要素ではないと確信しています。例えば、あなたがリンクリスト "1 2 3 4 5 6 7 8 9"を持っていて、9位にあることを知りたければ、9ではなく1にするべきです。 –

+0

ええ、whileループ中のkを変更してください(長さ - k)。それは最後のk番目の要素を見つけるでしょう。 –

0

は1つのだけの変数が必要です。あなたのコードでp1で、リスト上のk番目の要素への参照を。あなたがここでそうするようにその要素を見つけます:

for(int i=0; i<k-1;i++) { 
    p1 = p1.next; 
} 

そして、それを返します。また、前のif(k<1|| k>this.length())を見ると、ゼロ以外の数字以外のものがあるので、headがリンクリストの1番目のノードになるため、forのループを1にするとiを初期化する必要があります。