2012-03-20 19 views
0

コンテキストは、Lリンクリストの1つです。私はLが最初に0ではないと仮定していると、すべてのリンクされたリストは、次のフィールドとしてNULLを持つノードで終了します。このリンクリスト機能の何が問題になっていますか?

void g(node*, int, char); 
void g(node* L, int k, char y) { 
    node* current = L; 
    if (current->info == y) k--; 
    while (current->next) { 
     if (current->next->info == y) { 
      if (k > 0) k--; 
      else { 
       node* very_next = current->next->next; 
       delete current->next; 
       current->next = very_next; 
      } 
     } 
     current = current->next; 
    } 
} 

私はwhile(current->next)のレベルでBAD_ACCESSの警告を取得しておきます。どうしましたか?テスト(!current->next)が失敗したので、そこの正しいノードにアクセスしています。だから何が問題なの?

私がテストだリンクリストは、この構造体と

node* n = new node('a',new node('b', new node('a', new node('c', new node('a', 0))))); 

です:

struct node { 
    char info; 
    node* next; 
    node(char a = 0, nodo* b = 0) { 
     info = a; 
     next = b; 
    } 
}; 
+1

いくつかの 'node'sといくつかの' nodo'sがありますか?実際のコードをコピーできますか? –

+0

@BrendanLong、修正済み。 "nodo"はイタリア語の "ノード"です。私はちょうど理解のためにそれを翻訳しました。 – Shoe

+0

私のための作品:http://codepad.org/TzzkiniO私の推測では、コードにはあなたが私たち(main()関数のような)を表示していない何かがあります。 –

答えて

5

current->next->next == very_next = NULL場合、現在は、このように(current->nextを経由して)現在の無効(current = current->next = very_next)への以降のアクセスを行うだけでなくNULLを割り当てられませでしょうか?

+0

これは実際には本当の問題です。彼は正しい。 current-> nextがNULLになったら、while current = current-> nextの最後で0にすることができます。 – Shoe

+0

また、削除後にcurrent = current-> nextを設定すると、そのノードをスキップします繰り返し。 –

3

次の要素にすることができ指している次の電流>ネクスト>ループ内であなたの仮定間違っていれば、これが本当であるかどうか最初に確認する必要があります。

+0

current-> nextは!= 0ならcurrent-> nextは確かにinfoフィールドです。また、current-> nextが!= 0の場合は、確実にcurrent-> next-> next(これも0かもしれません)があります。 – Shoe

+0

申し訳ありません、私はpiokucに返信しようとしていました。私はこれが問題ではないことに同意します。 –

+0

@BrendanLongこの練習の文脈でも、すべてのノードに正しいnode-> nextまたは空の(0/NULL)ノード - >次のフィールドがあります。情報もありません)。 – Shoe

関連する問題