我目前正在對C中的鏈接列表進行排序以作爲家庭作業。我不是在尋找一個代碼片段作爲答案,因爲我明白了自己想出來的價值。我正在使用下面的函數接收段錯誤,如果有人能告訴我爲什麼,我會非常感激。我能想出的最好的是,它是達到以下線的時候失敗:排序鏈接列表(mystery段錯誤)
如果(頭戴式>值>頭戴式>下一步 - >值){
編輯:改變了這一行到if(head-> next!= NULL & & head-> value> head-> next-> value){我不再接收段錯誤。但是,我的輸出頭指針給了我鏈接列表中的最後一個節點。 HALP。
我不完全知道從哪裏何去何從,甚至在正確的方向絲毫微調將是非常讚賞。
struct node *sort_list(struct node *head) {
bool swapped ;
struct node * tmp , * orig ;
orig = head ;
if (head == NULL || head->next == NULL) return head ;
else {
do {
swapped = false ;
if (head->next != NULL && head->value > head->next->value) {
tmp = head ;
head = head->next ;
tmp->next = head->next ;
head->next = tmp ;
swapped = true ;
}
head = head->next ;
} while (swapped == true && head != NULL) ;
}
return orig ;
}
我沒有看到問題的副手,但如果我是你,我會做一個'交換(...)'函數,它的交換代碼,並將其放在其自身的功能。然後,您可以測試該功能,直到您確信它可以正常工作。一旦你有了,你可以專注於你的分類邏輯。就目前而言,你必須首先弄清楚你的排序邏輯或交換邏輯是否搞亂了。 – corsiKa 2012-01-15 01:57:16
學習如何使用調試器是您值得投資的時間。這樣可以避免提出這樣的問題(以及其他許多問題),並且您可以更快地完成更多工作。 – 2012-01-15 01:58:47
不是學習調試器的問題,而是我需要更好地使用它。我有一條漫長的道路在我前面! – mmmeff 2012-01-15 02:01:54