2017-07-30 18 views
0

私のコードはEclipseではうまく動作しますが、プログラミングサイトのコンパイラではうまく動作しません。このコードは、指定された位置にノードを追加することについてです。新しいノードが挿入されますので、それが0番目の位置に挿入されていないとnode -> new node -> next nodeシーケンスを配置する必要がある場合単一リンクリスト内の特定の位置の後にノードを挿入

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

    Node last = head; 
    int count = 0; 

    if (position == 0) { 
     n.data = data; 
     n.next = head; 
     head=n; 
     return n; 
    } 

    while (count < position) { 
     count++; 
     last = last.next; 
    } 
    n.data = data; 
    n.next = last.next; 
    last.next = n; 
    return head; 
} 
+0

どのサイトでは機能しませんか?どのようなエラーが出ますか?これは完全な例ですか? – TinyTheBrontosaurus

答えて

0

あなたが位置を確認していないにもループを行き過ぎ、とは範囲内にありますより良い。

+0

ありがとうございます。あなたのコードは動作します。 – Karthik

+0

forループのif条件は、lastがnullでないときだけforループに入るので必要ないと思います。 – Karthik

+0

@Karthikあなたはどう思いますか? positionがリストのサイズ(+ 1)より大きい場合は、条件なしでnull( 'NullPointerException')でnextを呼び出すことになります。 –

0

あなたはこのよう番目の位置(ポジション+ 1)、以下のようにコードを変更する必要があります。

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

    if (position == 0) { 
     n.next = head; 
     return n; 
    } 

    Node last = head; 
    for (int count = 0; count < position-1; count++) { 
     if (last == null) { 
      return null; 
     } 
     last = last.next; 
    } 

    n.next = last.next; 
    last.next = n; 
    return head; 
} 

はまた、ループに適している、といくつかの他のものを再配置することができます

while (count < position - 1) { 
    count++; 
    last = last.next; 
} 
n.data = data; 
n.next = last.next; 
last.next = n; 
return head; 
関連する問題