2017-03-07 7 views
0

リンクリストの先頭ノードへのポインタ、リストに追加する整数、整数を挿入する必要のある位置を指定します。 このノードを目的の位置に挿入したら、ヘッドノードを返す必要があります。リンクリストの特定の位置にノードを挿入する

私が書いたコードは何らかの理由で動作しておらず、無限ループに入ります。

class Node { 
    int data; 
    Node next; 
    } 


Node InsertNth(Node head, int data, int position) { 
    int count = 0; 
    Node node = head; 
    Node prev = null; 
    while(count != position){ 
     count++; 
     node = node.next; 
     prev = node; 
    } 

    Node newNode = new Node(); 
    newNode.data = data; 


    newNode.next = node; 
    if(count == 0){ 
      head = newNode; 
     }else{ 
      prev.next = newNode; 
    } 

    return head;   
} 
+0

ヒント:あなた 'while'ループの終了後にこれを置く:'のSystem.out.println( "ノード=" + node.data + "PREV =" + prev.data); '実際には、あなたを'node'と' prev'が最初にヌルでないことを確認する必要があります。しかし、もしあなたがこれを行うならば、エラーを見つけ出すことができると思います。 – ajb

答えて

5
node = node.next; 
prev = node; 

これは、逆の順序

prev = node; 
node = node.next; 

であるべきであり、また、コードは、指定された位置のサイズよりも大きいかどうかに関して、例えば、多くのケースをチェックしませんリンクされたリスト。コードを書き直してみてください。また、関数をテストするためにどの値を使用しているかを記述することもできます。 私はprev=nodeはprevが初期化されていないので例外をスローするべきだと思います。

1

まず、私はその位置を見つけます。 ポインタを変更して、その位置に新しいノードを挿入します。

Node InsertNth(Node head, int data, int position) { 

    Node newNode= new Node(); 
    newNode.data=data; 

    Node ptr = head; 
    pos = pos - 1; 
    for (int i = 1; ; i++) { 
    if(ptr==null) 
     { break; 
      } 
     if (i == pos) { 
      newNode.next=ptr.next; 
      ptr.next=newNode; 
      break; 
     } 
     ptr = ptr.next; 
    } 
} 
関連する問題