-1

リンクされたリストをソートする例がたくさんあることは知っていますが、それらはリストが生成された後に呼び出される別の関数にソートを抽象化することに基づいており、悲しいことに、私がやろうとしていることには十分ではありません. 以下のコードは、すべての値が挿入されたときにリストがソートされ、ほとんどの場合に機能しますが、最初のスキャンされたアイテムは、リストの最初のアイテムでもあります。

たとえば、次の入力: 0 ant 7 world 3 kodak 1 best 6 the 2 is

リンクされたリストを生成します: World -> best -> is -> kodak -> the ->world

しかし、入力を次のように変更すると: 7 world 0 ant 3 kodak 1 best 6 the 2 is

リンクされたリストを生成します: ant -> best -> is -> kodak -> the -> world

問題のあるコードは次のとおりです。

        while(fscanf(fp,"%d %s\n", &traversor->key, traversor->word) == 2){


            newnode =  malloc(sizeof(struct node_t));
            newnode->key = traversor->key;
            strcpy(newnode->word, traversor->word);

            traversor = dict_head;

            while(traversor->next!= tailnode){

                if(traversor->next->key > newnode->key){break;}

                traversor = traversor->next;
            }
            printf("Traversor is sitting on %s\n", traversor->word);
            newnode->next = traversor->next;
            traversor->next = newnode;
            traversor = dict_head;
            for(x = 0; x < list_size; x++)
            {
                printf("%d %s %d ->", traversor, traversor->word, traversor->key);
                traversor = traversor->next;
            }
            printf("%d %s %d",traversor->next, traversor->next->word, traversor->next->key);

            printf("\n");
            list_size++;
        }

提供できる洞察は大歓迎です。私はまだポインターを把握しているので、それは本当に基本的なエラーである可能性が高いですが、悲しいことに何時間も見てもわかりませんそれは何ですか。

編集:

struct node_t{
    int key;
    char word[WORDLEN];
    struct node_t *next;
};

これがノード構造体です。

4

2 に答える 2

1

私の解決策...

最初にWhileループを変更します

while(traversor->next!= NULL)
{
    if(traversor->next->key > newnode->key)
    {
         break;
    }
    traversor = traversor->next;
}

2番目:リストがそうであるかどうかを確認する必要があるのは初めてですempty

if(dict_head == NULL)
{
     dict_head = newnode;
     dict_head->next = NULL;
}

それからあなたの他の部分

else
{
    newnode->next = traversor->next;
    traversor->next = newnode;
}

これがお役に立てば幸いです。

于 2013-08-30T11:04:29.413 に答える