雖然我知道有很多排序鏈表的例子,但它們是基於將排序抽象爲一個單獨的函數,該函數在列表生成後調用,並且可悲的是,對於我正在嘗試做的事情來說足夠了。下面的代碼是我試圖將一個鍵/單詞對插入到正確位置的鏈接列表中,這樣當所有的值都被插入時,列表被排序,並且它在大多數情況下工作,但是當第一個掃描的項目也是列表中的第一項。插入時對鏈表進行排序
例如,輸入: 0螞蟻 7世界 3柯達 1最好 2是
產生鏈表: 世界 - >最好的 - >是 - > KODAK - >的 - >世界
然而,如果你改變了輸入到: 7世界 0螞蟻 3柯達 1最好 2是
它產生的鏈表: 螞蟻 - > BEST->是 - > kodak-> the->世界
這裏是有問題的代碼:
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;
};
這裏是節點結構。
你怎麼知道你到達你的尾巴? – someone
我已經拿出了很多調試printfs來使它更容易閱讀,但是如果你添加一個從列表頭開始並遍歷的print while循環,當你到最後時,最後一個節點指向到尾節點(並且在上述兩種情況下都這樣做)。 – Spacepotato
我的問題是爲什麼你沒有比較指向'NULL'的指針... – someone