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