C语言链表冒泡排序算法优化与示例
C语言链表冒泡排序算法优化与示例
你提供的代码中使用了两个嵌套的 for 循环来进行冒泡排序,排序的逻辑是正确的。然而,在内层循环中,你操作的是 temp 指针,而没有正确地更新 temp 指针的位置,导致内层循环没有实际执行交换操作。
以下是根据你提供的代码进行修改后的示例:cNode* sort_list(Node* head) { Node* current = head->next; int count = 0; // 计算链表长度 for (; current != NULL; current = current->next) { count++; } // 冒泡排序 for (int i = 0; i < count; i++) { Node* temp = head->next; for (int j = 0; j < count - i - 1; j++) { if (temp->value > temp->next->value) { int tempvalue = temp->value; temp->value = temp->next->value; temp->next->value = tempvalue; } temp = temp->next; // 更新 temp 指针的位置 } } return head;}
在修改后的代码中,我们将头节点的 next 指针赋给 temp 指针,确保内层循环中的操作能够正确地遍历链表。在内层循环中,每次交换节点值后,我们将 temp 指针向后移动一位,更新为下一个节点的指针。
需要注意的是:
- 这个示例假设输入的链表是带头节点的单链表。如果链表没有头节点,需要根据实际情况进行相应的修改。* 代码中没有对链表为空或只有一个节点的情况进行特殊处理,你可能需要根据题目要求进行适当的调整。
希望这个优化后的代码示例能够帮助你更好地理解和应用链表排序。
原文地址: https://www.cveoy.top/t/topic/NtQ 著作权归作者所有。请勿转载和采集!