我正在尝试使用选择排序对链表进行排序。我只能操纵链表指针而不能更改键。我想我有功能逻辑,但是,我只是返回原始的未排序序列。
bool nodeSwap(Node* head){
Node* next = head->next;
if(next == NULL){ return head;}
head->next = next->next;
next->next = head;
head = next;
return next;
}
Node* sort_list(Node* head){
for(Node* n = head; n->next != NULL; n = n->next){
for(Node* n1 = head->next; n1 != NULL; n1 = n1->next){
if(n-> key > n1->key){
nodeSwap(n);
}
}
}
return head;
}
编辑
好的,所以我完成并添加了更多和一些逻辑,这一次实际上有些意义,我的功能几乎可以正常工作......唯一的问题是它总是跳过列表中前两个元素的排序并且没有'排序后返回。关于为什么会发生这种情况的任何想法?
Node* sort_list(Node* head){
Node* curr;
Node* prev;
for(curr = head; curr->next != NULL; curr = curr->next){
if(curr == head){
head = curr->next;
curr->next = head->next;
head->next = curr;
prev = head;
}
else if(curr->key > curr->next->key){
head = curr->next;
curr->next = head->next;
head->next = curr;
prev = head;
} else if(curr -> next -> next != NULL){
prev->next = curr->next;
curr->next = prev->next->next;
prev->next->next = curr;
}else if(head != curr){
prev = prev->next;
}else{}
}
return head;
}
最佳答案
尝试放置编译代码和/或提出特定问题。
第 3 行:返回头部;
在一个应该返回 bool 值的函数中
关于c++ - 尝试仅通过操作指针对链表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19577335/