2013-08-30 142 views
-1

雖然我知道有很多排序鏈表的例子,但它們是基於將排序抽象爲一個單獨的函數,該函數在列表生成後調用,並且可悲的是,對於我正在嘗試做的事情來說足夠了。下面的代碼是我試圖將一個鍵/單詞對插入到正確位置的鏈接列表中,這樣當所有的值都被插入時,列表被排序,並且它在大多數情況下工作,但是當第一個掃描的項目也是列表中的第一項。插入時對鏈表進行排序

例如,輸入: 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; 
}; 

這裏是節點結構。

+0

你怎麼知道你到達你的尾巴? – someone

+0

我已經拿出了很多調試printfs來使它更容易閱讀,但是如果你添加一個從列表頭開始並遍歷的print while循環,當你到最後時,最後一個節點指向到尾節點(並且在上述兩種情況下都這樣做)。 – Spacepotato

+0

我的問題是爲什麼你沒有比較指向'NULL'的指針... – someone

回答

1

我的解決辦法...

首先改變你的While循環

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

二:對於第一次,你需要檢查,如果你的列表empty與否。

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

那麼你的其他部分

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

我希望這會幫助你。

+0

+1希望這jibes與任何OP正在諮詢的其他材料。 – delicateLatticeworkFever

+0

@goldilocks ...如果你知道什麼是問題,你爲什麼沒有回答? – someone

+0

因爲我認爲你指出了正確的方向! – delicateLatticeworkFever

0

有沒有地方你分配dict_head,這似乎是一個錯誤。我猜測它是在第一個節點插入後需要更改的其他東西開始的。

您可能需要一個特殊的if來測試您是否正在插入第一個節點。