2017-03-16 14 views
0

以下は、リンクリストの最後にノードを挿入するためのフラグメントが無効です。リンクリストの最後にノードを挿入する

void insert_end(int item){ 

    nodeptr newNode = new ListNode; 
    newNode->data = item; 
    newNode->next = NULL; 

    if(head == NULL){ 
     head = newNode; 
     curr = head; 

    }else{ 
     curr = head; 

     while(curr != NULL) curr = curr->next; 
     curr = newNode; 
    } 
} 

リンクリストの最後にノードを挿入するのに有効な別のフラグメント。

void insert_end(int item){ 

    nodeptr newNode = new ListNode; 
    newNode->data = item; 
    newNode->next = NULL; 

    if(head == NULL){ 
     head = newNode; 
     curr = head; 

    }else{ 
     curr = head; 

     while(curr->next != NULL) curr = curr->next; 

     curr->next = newNode; 
    } 
} 

私の質問はなぜ1番目が無効ですか?実際には2つの断片が似ているはずです。 私はすでに3つのノードがあるとします。今私は別のノードを挿入したい。

  1. curr = NULLのときの最初のアルゴリズムとして、whileループは満たされません。
  2. curr-> next = NULLの場合の2番目のアルゴリズムとして、whileループは満たされません。

私は最初のアルゴリズムの 'curr'と2番目のアルゴリズム 'curr-> next'はどちらも似ていますが、whileループは終了しましたか? それが似ていない場合、なぜですか?

+0

使用している言語のタグを追加できますか? –

+1

C++が追加されました。 ご連絡ありがとうございます。 – Nahids

答えて

1

ポインターが値である変数であることを理解する必要があります。

whileループの繰り返しを終了するとcurrがNULL(アドレス0x0)を指し、NULLがリストの有効なノードではないため、最初のアルゴリズムは間違っています。

whileループの繰り返しを終えるとcurrはリストの最後のノードを指し、newNodeをcurr-> nextに追加してNULLをnewNodeのアドレスに置き換えるため、2番目のアルゴリズムが機能します。

希望すると便利です。 :)

+1

はい私はそれを得た:) – Nahids

関連する問題