我目前正在对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