我試圖使用選擇排序來排序鏈接列表。我只能操作鏈接列表指針,而不能更改鍵值。我認爲我有功能邏輯,但是,我只是返回原始的未排序序列。嘗試僅通過操作指針對鏈接列表進行排序
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;
}
你不能像這樣交換兩個節點。那麼'next'指針指向'head'的節點會傳遞給'nodeSwap'嗎? – paddy
所以你試圖對鏈表進行冒泡排序,對嗎?如果你認爲這是直截了當的,你不妨多想一想。它可以*製作*非常簡單,但你必須深入思考。你真的在改變什麼? – WhozCraig