根据您提供的代码,有一处逻辑错误。在内层循环中,您正在比较当前节点和下一个节点的类型,并交换它们,但是您忽略了对链表头指针的更新。这可能导致排序过程不正确。
以下是修复后的代码:
for(index = 0; index < num + 1; index++) {
Node *current = *head;
for(point = 0; point < num - index; point++) {
if(current->type > current->next->type) {
swap(current, current->next);
// 更新头指针(如果需要)
if (*head == current) {
*head = current->next;
}
}
current = current->next;
}
Node *tmp = *head;
printf("第%d次排队: ", num + 1);
for(j = 0; j < num + 1; j++) {
printf("%d ", tmp->id);
print_type(tmp->type);
tmp = tmp->next;
}
printf("\n");
num++;
if(num == 10) {
break;
}
}
请注意,在交换节点时,还需要考虑更新链表头指针(如果当前交换影响到了链表头部)。
内容由零声教学AI助手提供,问题来源于学员提问




