0

char* であるリンクされたリストの内容を出力しようとしていますが、while ループがコードを台無しにしています:

リンクされたリストの次の項目を取得する関数:

char * list_next(list *l)
{
    list *currentPosition = NULL;
    currentPosition = l->next; //since the first node is a dummy value in the singly linked list

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

    return NULL;
}

私のメインで:

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

誰かが私を助けてくれますか?私は問題がwhileループ内のリターンであると確信していますが、私はそれを修正できないようです

4

4 に答える 4

3

2行を入れ替えます。returnすぐに関数を終了します。それは読むべきです

currentPosition = currentPosition->next;
return currentPosition->charValue;

代わりは。

(他の人が指摘した他の多くのエラーは言うまでもありません-nextスコープに関する混乱、NULL逆参照の前のチェックの欠落などのために実際にポインターを更新する機能の欠如。)

于 2013-02-18T21:47:44.270 に答える
0

元のリストを list_next() に渡します。2 番目のアイテムは常に永久ループで印刷されると思います。

以下のように簡略化できることをお勧めします。

char *item;
for (item=list->next; // Skip the first item as you said the first node is dummy.
     item != NULL; item=item->next) {
    printf("%s ",item->charValue);
} 
于 2013-02-18T21:58:56.317 に答える
0

コメントで、リンクされたリストのすべての値を返すだけでよいと述べました。

function iterate(someNode)
   if someNode ≠ null
     node := someNode
     do
       do something with node.value [1]
       node := node.next
     while node ≠ someNode

このウィキペディアの記事から、CC BY-SA . これで、コードの [1] の位置で

簡単に実行できます。printf()ただし、すべての値を返す必要があるようです。したがって、(おそらく動的な) 配列を作成する必要があります。

于 2013-02-19T18:48:54.693 に答える