虽然我知道有很多对链表进行排序的示例,但它们是基于将排序抽象为一个单独的函数,该函数在生成列表后调用,遗憾的是这还不足以满足我的要求. 下面的代码是我尝试将键/词对插入到正确位置的链表中,以便在插入所有值后对列表进行排序,并且它适用于大多数情况,但似乎在第一次出现错误时扫描的项目也是列表中的第一个项目。
例如:0 ant 7 world 3 kodak 1 best 6 the 2 的输入是
产生链表: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;
};
这是节点结构。