c++ - 通过交换节点链接而不是交换值来对链表进行递归选择排序-C++
问题描述
我正在尝试以递归方式为单链表编写选择排序,当我想交换两个节点时遇到了麻烦。这是我的交换功能:
void swapNode(ListNode** head_ref, ListNode* min, ListNode* prevMin, ListNode* head){
*head_ref = min;
ListNode* temp = min->next;
min->next = head->next;
head->next = temp;
prevMin->next = head;
}
然后就进入了无限循环。当我更改最后一行“prevMin->next = head;”时 像这样进入第二行:
void swapNode(ListNode** head_ref, ListNode* min, ListNode* prevMin, ListNode* head){
*head_ref = min;
prevMin->next = head;
ListNode* temp = min->next;
min->next = head->next;
head->next = temp;
}
一切正常。谁能看到这里的原因?
这是我的选择排序函数,其中调用了 swapNode:
ListNode* selectionSortLL(ListNode* head){
if(head == NULL || head->next == NULL) return head;
ListNode* cur = head;
ListNode* min = head, *prevMin = NULL;
while(cur->next){
if(cur->next->val < min->val){
min = cur->next;
prevMin = cur;
}
cur = cur->next;
}
if(min != head){
swapNode(&head, min, prevMin, head);
}
head->next = selectionSortLL(head->next);
return head;
}
解决方案
推荐阅读
- python - 可以优化 numba 函数中的这个循环以更快地运行吗?
- cordova - 运行cordova run android时如何修复只读文件系统?
- c++ - Libreoffice C++ 扩展快捷方式
- git - git checkout 丢失的文件
- react-native - Expo:与 expo-Constants 相关的问题 Sdk33
- jquery - 第二个jQuery函数取消第一个
- javascript - 用于 javascript 的官方词法分析器生成器
- c# - 使用类名作为字符串c#设置类变量
- react-native - 世博会:UIManager 抛出警告 UIManager
- angular - 在Angular 8中获取组件外部的引用变量