有史以来第一次使用链表。我试图得到一个函数,如标题所述,它按int
值(val
)对链表的节点进行排序。但是当函数被调用时,程序就把我晾在一边了。
给定我的简单节点结构:
struct node {
int val;
struct node* next;
};
这是我希望的函数:
void sort(struct node** head) {
struct node* curr = *head;
while (curr != NULL) {
struct node* next = curr->next;
while (next != NULL) {
if(curr->val > next->val) {
swap(&curr->val, &next->val);
// next = next->next;
}
next = next->next; // has to go here
}
curr = curr->next;
}
}
我承认这可能会让人感到困惑,我试图重复使用相同的逻辑,就像我必须对向量进行排序一样(比较每个项目,就像我有一个索引一样)。先谢谢你帮我。
编辑:开个玩笑,我刚刚注意到我错误地配置了第二个while
。next->next
节点必须超出if条件
1条答案
按热度按时间a64a0gku1#
你的代码不能工作是有道理的,因为你正在做冒泡排序,这并不能保证列表通过列表,数组或数组来排序。一次
要对一个链表进行排序,你应该这样做: