2016-10-17 10 views
1

ノードをリンクリストに挿入して(ヘッドを返す)ことを学びたいが、何らかの理由で正しくない。リンクされたリストにノードを挿入するロジックエラー(Java)

これは私のアプローチです:

1.は、我々が最初にそれを挿入したい場合は、頭にこの新しいノードを指す目的のデータ

2.で新しいノードを作成します。そして新しいノードそうでない場合

3.を返す、我々はノードを挿入したい位置にループ

- ノードへの現在のノードが

挿入するポイント - -我々はそこに着くたら、ノードを指すがの現在のノードの次の

の隣に挿入するリターンヘッド

これはなぜ機能しませんか?本当にありがとう!

Node InsertNth(Node head, int data, int position) { 
    Node node = new Node(); 
    node.data = data; 

    if (position == 0) { 
     node.next = head; 
     return node; 
    } 
    else { 
     Node curr = head; 
     int currPos = 0; 

     while (currPos < position) { 
      curr = curr.next; 
      currPos++; 
     } 
     node.next = curr.next; 
     curr.next = node; 
    } 
    return head; 
} 
+2

どういう意味ですか?正確に何が起こっているのですか?あなたの問題を説明してください。それを理解するコードを読ませないでください。 – ChiefTwoPencils

+0

高レベルのコードでは、よく見えます、あなたが直面している問題をお知らせください。 –

+0

また、コールはどのように見えますか?それは 'head = insert(...);'ですか? – ChiefTwoPencils

答えて

-1

ノードにヘッドを挿入する場合、挿入するノードにヘッドを設定する必要があります。あなたはcurrノードの後に​​新しいノードを挿入することを考えると

Node InsertNth(Node head, int data, int position) { 
Node node = new Node(); 
node.data = data; 

if (position == 0) { 
    node.next = head; 
    head = node; 
} 
else { 
    Node curr = head; 
    int currPos = 0; 

    while (currPos < position) { 
     curr = curr.next; 
     currPos++; 
    } 
    node.next = curr.next; 
    curr.next = node; 
} 
return head; 

}

+0

共有されたアルゴリズムに従って、headが返されます。これはifループで行われています。 –

+0

ノードを先頭に挿入すると、メソッドの最後に頭を返します。挿入されたノードを指しています。ifループでは 'head = node;'を実行します。 – djointster

+0

ifループ内にreturn文があります。それは方法の終わりに行きません。 if(position == 0){ node.next = head; リターンノード。 } –

0

、このループはあまりにも遠くに一つのノードを繰り返します。

コードをペンや紙で、またはデバッガを使って簡単に実行できます。

関連する問題