0

リンクされたリストから char* 値を返すのに問題があります。誰か助けてください。 while ループ内で char* 値を返すにはどうすればよいですか? プログラムを実行しようとすると、リンクされたリストから単一の値が取得され、次のコードで永久にループします。

char * list_next(list *l)
{    
   list *currentPosition = NULL;    
   currentPosition = l->next; //skipping dummy value in the singly linked list

  while (currentPosition != NULL)
  {
    currentPosition = currentPosition->next;
    return currentPosition->charValue;

  }

   return NULL;
}

これは私が関数を呼び出す方法です:

char * item;
while(item = list_next(list))    
printf("%s ",item);
4

2 に答える 2

1

のようなことをする方が簡単でしょう

list* current = list->next; //skip the dummy

while(current)
{
    printf("%s ", current->charValue);
    current = current->next;
}

しかし、関数でそれを行う必要があり、取得した形式で行う必要があるため、次のようなことを行います。

char* list_next(list **l)
{    
  if (*l != NULL)
  {
    char* value = (*l)->charValue;
    *l = (*l)->next;
    return value;
  }

   return NULL;
}

そしてそれをそのように呼びます

list* temp_list = my_list->next; //skip the dummy

char * item;
while(item = list_next(&temp_list))    
    printf("%s ",item);

関数から返せる値は 1 つだけです。リスト全体を移動するために while ループで最初に行ったように関数を繰り返し呼び出すには、入力パラメーターを変更して、while ループの次の呼び出しがリスト内の次の要素で動作するようにする必要があります。**関数パラメータの に注意してください。

于 2013-02-18T23:13:35.980 に答える
0

ループの途中で戻るため、他のノードを処理する機会がありません。

複数の文字を処理するには、何かを変更する必要があります。それらを配列に集めることもできますが、リスト内にいくつの項目があるかを事前に知る必要があるという問題が生じます。ThePosey が提案するように、アイテムをインラインで処理できます。

list_nextしかし、関数が毎回 1 つのアイテムを返すようにしたい場合は、リスト値とリスト ポインターの 2 つを「返す」必要があります。1 つの方法は、関数のシグネチャを変更することです: char * list_next(list **l). ポインターへのポインターを渡すと、関数はそれを出力パラメーターとして使用し、次のノードに設定できます。

于 2013-02-18T23:09:43.200 に答える