写链表冒泡排序时出了问题,内部循环执行了2次,为什么外部循环只执行1次


关注参考一下优化后的代码:
struct student temp;
struct node* turn = headnode->next;
// 外部循环遍历链表
for (; turn != NULL; turn = turn->next) {
struct node* move = headnode->next; // 内部循环每次都从头开始
// 内部循环用于比较和交换
for (; move->next != NULL; move = move->next) {
if (move->data.average > move->next->data.average) {
// 交换 move 和 move->next 的数据
temp = move->data;
move->data = move->next->data;
move->next->data = temp;
}
}
}
问题分析:
循环条件设置不正确:外部循环应该遍历整个链表,但你的内部循环的起始条件 move=headnode->next 只在第一次外部循环时被设置,后续没有重置。因此,在第一次外部循环结束后,move 指针已经到达链表末尾,导致内部循环在后续迭代中不再执行。
变量命名错误:你的代码片段中出现了一些拼写错误,如 headnodecsnextngRed 应该是 headnode->next。
交换逻辑:当你交换节点数据时,你应该使用一个临时变量来保存其中一个节点的数据,然后进行交换。你的代码似乎在这方面是正确的,但是变量名 terg 似乎是一个拼写错误。